【问题标题】:Mapping multiple lists to create (key, value) pairs in python [closed]映射多个列表以在python中创建(键,值)对[关闭]
【发布时间】:2017-11-09 14:56:03
【问题描述】:
key  = ["id","name","sal"]
id   = [1,2,3,4]
info = [["John",1000], ["Joel",5000], ["Tom",2000],["Ray",1000]]

在python(字典列表)中生成以下输出的最简单方法是什么?

[{id=1,name="John",sal=1000},
 {id=2,name="Joel",sal=5000},
 {id=3,name="Tom",sal=2000},
 {id=4,name="Ray",sal=1000}]

【问题讨论】:

    标签: python python-2.7


    【解决方案1】:

    你可以使用zip:

    key_list = ['name','id']
    name_list = ['John', 'Tom', 'David','Joel','Liza']
    id_list = [1,2,3,4,5]
    final_data = [{key_list[0]:a, key_list[1]:b} for a, b in zip(name_list, id_list)]
    

    输出:

    [{'name': 'John', 'id': 1}, {'name': 'Tom', 'id': 2}, {'name': 'David', 'id': 3}, {'name': 'Joel', 'id': 4}, {'name': 'Liza', 'id': 5}]
    

    【讨论】:

    • 为了在此问题中使用python 2.7 获得更好的性能,您应该使用itertools.izip
    • 你可以再次使用zip来缩短它(稍微):[dict(zip(key_list, v)) for v in zip(name_list, id_list)]
    • @DanhPham 如果name_listid_list 已经是完全实例化的列表,使用itertools 只会增加开销。 itertools 中的函数是为了提高内存效率。
    • @chepner 你不需要在这种情况下构建的项目的完整列表,你只需要一个迭代。 izip 对于节省内存很有用。我遵循这个问题的答案:When is it better to use zip instead of izip?
    【解决方案2】:

    您可以zip name 和 id 列表,然后使用密钥列表再次压缩这些元组。

    >>> [dict(zip(key_list, pair)) for pair in zip(name_list, id_list)]
    [{'name': 'John', 'id': 1},
     {'name': 'Tom', 'id': 2},
     {'name': 'David', 'id': 3},
     {'name': 'Joel', 'id': 4},
     {'name': 'Liza', 'id': 5}]
    

    这也适用于任意数量的键和属性列表。

    >>> attributes = [name_list, id_list] # and maybe more
    >>> [dict(zip(key_list, pair)) for pair in zip(*attributes)]
    

    【讨论】:

      【解决方案3】:

      我认为我的解决方案是根据输出格式

      [{'{}={}'.format(key_list[0],a),'{}={}'.format(key_list[1],b)} for a, b in zip(name_list, id_list)]
      

      输出

       [{'id=1', 'name=John'},
       {'id=2', 'name=Tom'},
       {'id=3', 'name=David'},
       {'id=4', 'name=Joel'},
       {'id=5', 'name=Liza'}]
      

      【讨论】:

      • 您正在创建一个set 字符串,而不是字典。
      • @tobias_k 因此必须更改输出格式
      • 不确定你的意思。更改格式字符串不会一下子使它成为字典。您必须使用 {key_list[9]: a, ...} 或类似名称才能使其成为 dict 理解。
      【解决方案4】:

      您可以使用zip 并结合名称和ID 列表,然后使用密钥列表再次压缩这些元组。这应该可以满足您的要求,

      key_list = ['name', 'id']
      name_list = ['John', 'Tom', 'David', 'Joel', 'Liza']
      id_list = [1, 2, 3, 4, 5]
      data =  [dict(zip(key_list, (a,b))) for a,b in zip(name_list, id_list)]
      

      输出应该是这样的,

      [{'name': 'John', 'id': 1}, {'name': 'Tom', 'id': 2}, {'name': 'David', 'id': 3}, {'name': 'Joel', 'id': 4}, {'name': 'Liza', 'id': 5}]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-12
        • 1970-01-01
        • 2018-01-23
        • 1970-01-01
        • 1970-01-01
        • 2012-06-19
        相关资源
        最近更新 更多