【问题标题】:Create multiple dictionaries from lists with strings with fixed key values从具有固定键值的字符串的列表创建多个字典
【发布时间】:2021-06-30 18:16:43
【问题描述】:

我有一个用户信息列表,例如

[name1,link1,id1,name2,link2,id2,name3,link3,id3,...]

我想输出一个包含多个字典的列表

[
 {"name":"name1",
  "link":"link1",
  "id":"id1"
 },
 {"name":"name2",
  "link":"link2",
  "id":"id2"
 },
 {"name":"name3",
  "link":"link3",
  "id":"id3"
 }
]

一开始我试过这个

user_info_keys = ["name","link","id","name","link","id","name","link","id"]

user_info_value = ["name1","link1","id1","name2","link2","id2","name3","link3","id3"]

for keys,value in zip(user_info_keys,user_info_value):
    user_info_dict = dict(zip(user_info_keys,user_info_value))

但它只输出

{"name":"name3","link":"link3","id":"id3"}

我应该如何更改代码以获得预期的结果?

【问题讨论】:

  • 你必须为这个列表中的每 3 个元素创建一个新的字典。您发布的代码不断覆盖以前的数据。如果不出意外,请参阅有关如何“分块”列表的帖子。

标签: python python-3.x list dictionary


【解决方案1】:

我可能只是采用一种愚蠢的方法和一个索引来获取每个部分:

user_info_keys = ["name","link","id","name","link","id","name","link","id"]

user_info_value = ["name1","link1","id1","name2","link2","id2","name3","link3","id3"]

outputs = [
    dict(zip(user_info_keys[i:i+3], user_info_value[i:i+3]))
    for i in range(0, len(user_info_keys), 3)
]

请注意,如果每个 dict 没有恰好 3 个键,这将失败。

【讨论】:

    【解决方案2】:

    你在同一个轨道上我会采取 - 压缩列表一起创建字典。

    你只需要把你的列表分成几块,然后对每一块都做。

    itertools docs 中有一个 grouper 函数示例可用于此目的。

    from itertools import zip_longest
    
    def grouper(iterable, n, fillvalue=None):
        "Collect data into fixed-length chunks or blocks"
        # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx"
        args = [iter(iterable)] * n
        return zip_longest(*args, fillvalue=fillvalue)
    
    keys = ["name", "link", "id"]
    
    user_info = ["name1","link1","id1","name2","link2","id2","name3","link3","id3"]
    
    groups = grouper(user_info, n=len(keys), fillvalue='')
    
    users = [dict(zip(keys, values)) for values in groups]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-27
      • 2021-01-29
      • 2021-09-04
      • 1970-01-01
      • 2021-01-04
      • 2014-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多