Python Dict 理解创建和更新字典
Posted
技术标签:
【中文标题】Python Dict 理解创建和更新字典【英文标题】:Python Dict Comprehension to Create and Update Dictionary 【发布时间】:2015-06-23 04:19:18 【问题描述】:我有一个字典(数据)列表,并希望将其转换为字典 (x),如下所示。 我正在使用以下'for循环'来实现。
data = ['Dept': '0123', 'Name': 'Tom',
'Dept': '0123', 'Name': 'Cheryl',
'Dept': '0123', 'Name': 'Raj',
'Dept': '0999', 'Name': 'Tina']
x =
for i in data:
if i['Dept'] in x:
x[i['Dept']].append(i['Name'])
else:
x[i['Dept']] = [i['Name']]
Output:
x -> '0999': ['Tina'], '0123': ['Tom', 'Cheryl', 'Raj']
是否可以在字典理解或任何其他更pythonic的方式中实现上述逻辑?
【问题讨论】:
【参考方案1】:dict理解,即使不是不可能的,也可能不是最好的选择。我可以建议使用defaultdict
(https://docs.python.org/2/library/collections.html#collections.defaultdict):
from collections import defaultdict
dic = defaultdict(list)
for i in data:
dic[i['Dept']].append(i['Name'])
【讨论】:
【参考方案2】:这似乎太复杂了,以至于不能包含任何重要的代码,但只是为了好玩,给你:
dept: [item['Name'] for item in data if item['Dept'] == dept]
for dept in item['Dept'] for item in data
【讨论】:
我认为它一点也不复杂。但是,从大 O 的角度来看,它的速度较慢,因为必须为找到的每个唯一键重新扫描一次数据 - 最坏情况为 O(N^2)。 感谢 Underyx,这回答了我的问题并且完美运行。是的,确实需要一些时间才能理解。 :)。因此,我将采用@Julien Spronck 的建议。以上是关于Python Dict 理解创建和更新字典的主要内容,如果未能解决你的问题,请参考以下文章