【问题标题】:Dictionary/list comprehension to assign new dict values from lists to predefined keys [duplicate]字典/列表理解将列表中的新dict值分配给预定义的键[重复]
【发布时间】:2018-05-29 18:26:38
【问题描述】:

我有 2 个包含字符串的列表(它们也可以改为集合,如果这在这里有所不同):

names = ['abc' , 'xyz' , 'foo']
ids = ['1234' , '5678' , '9101']

列表中的项目数量会有所不同,但每个列表的项目数量总是完全相同,而且少于十几个。我需要从这些列表中创建一个字典output,并将列表项分配为结构如下的字典列表中的值:

[{'name' : 'abc', 'id' : '1234'},
 {'name' : 'xyz', 'id' : '5678'},
 {'name' : 'foo', 'id' : '9101'}]

对于这个函数来说,值一致地匹配也很重要,因为列表是按特定顺序生成的,并且需要保持这种顺序。这意味着,鉴于上述源列表,'name' : 'abc' 应始终与'id' : '1234' 在同一行。一个列表中的第一个值应与另一个列表中的第一个值配对,第二个与第二个配对,依此类推。

我已经尝试了很多东西,但仍然无法提供一个有用的示例来说明“我尝试过什么”。我认为,我只是从根本上不了解理解的工作方式。

**edit - 这被标记为重复,并且欺骗似乎解决了相同的需求,尽管它的文本和标题侧重于“json格式”而不是“dicts列表”或其他意味着我不会没找到。希望我的问题能引导一些人用稍微不同的术语搜索答案,谢谢。

【问题讨论】:

  • 哪个版本的python?
  • 对不起,这将在 3.6 中
  • 问题:“结构化如下:”块中的对象不是有效对象。外部大括号表示它是一个集合或一个字典;但是集合不能包含字典,字典只能包含键值对,不能包含单个值。也许你真正想要的是一个字典列表。
  • 大概是这样,是的,抱歉,正在调整

标签: python python-3.x dictionary-comprehension


【解决方案1】:

您可以使用zip + 列表/字典推导:

names = ['abc' , 'xyz' , 'foo']
ids = ['1234' , '5678' , '9101']

res = [{"name": n, "id": i} for n, i in zip(names, ids)]

【讨论】:

  • 对,我错过了 OP 的那部分。看来我很幸运)
  • 根据我对要求的解释,如果每个dict中的键值对是任意顺序的,只要“abc”与“1234”和“xyz”在同一个dict中就可以了" 与 "5678" 等;并且包含“abc”的字典在包含“xyz”的字典之前,等等。这两个条件都适用于这个解决方案。
  • 我猜他们可能在同一条垂直线上...
  • Kevin 的评论是准确的,我什至不在乎字典本身的顺序,只要正确的名称以正确的 id 结尾。我已经测试了大约 20 次,而且似乎非常一致。谢谢!
猜你喜欢
  • 2019-03-14
  • 2021-06-16
  • 2021-12-10
  • 2021-04-02
  • 2018-10-24
  • 2019-04-05
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
相关资源
最近更新 更多