代码之家  ›  专栏  ›  技术社区  ›  4c74356b41

从具有条件的列表创建字典

  •  -2
  • 4c74356b41  · 技术社区  · 7 年前

    以下是我的资料:

    ports = [ 1111, 2222, 3333 ]
    keys = ['port', 'target_port', 'name']
    ports = [dict.fromkeys(keys, port) for port in ports]
    

    这产生:

    [
        {
            "port": 1111,
            "target_port": 1111,
            "name": 1111
        }
        xxx
    ]
    

    问题是,“name”的值必须是字符串。如何在列表理解中添加条件?

    编辑:所有其他值必须保持整数
    编辑:我目前的解决方法:

    for port_dict in ports:
        port_dict['name'] = str(port_dict['port'])
    

    最后使用的是被接受答案的倒数,这样我就可以在列表的末尾添加键:

    keys = ['name', 'port', 'target_port']
    ports = [{**dict.fromkeys(keys[1:], port), "name": str(port)}
             for port in ports]
    
    4 回复  |  直到 7 年前
        1
  •  4
  •   Dani Mesejo    7 年前

    ports = [ 1111, 2222, 3333 ]
    keys = ['port', 'target_port', 'name']
    
    result = [{ **dict.fromkeys(keys[:2], port), "name" : str(port) } for port in ports]
    print(result)
    

    [{'target_port': 1111, 'name': '1111', 'port': 1111}, {'target_port': 2222, 'name': '2222', 'port': 2222}, {'target_port': 3333, 'name': '3333', 'port': 3333}]
    
        2
  •  3
  •   Green Cloak Guy    7 年前

    dict.fromkeys()

    ports = [ {key: (str(port) if key == "name" else port) for key in keys}
              for port in ports]
    
        3
  •  1
  •   r.ook jpp    7 年前

    def force_str(val, key, str_keys):
        if key in str_keys:
            return str(val)
        else:
            return val
    
    result = [{k: force_str(p, k, ['name']) for k in keys} for p in ports]
    
    # [{'port': 1111, 'target_port': 1111, 'name': '1111'}, 
    #  {'port': 2222, 'target_port': 2222, 'name': '2222'}, 
    #  {'port': 3333, 'target_port': 3333, 'name': '3333'}]
    

    str_keys key

        4
  •  0
  •   user83543    7 年前

    [{key: str(port) if key=="name" else port for key in keys} for port in ports]
    
    推荐文章