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 理解创建和更新字典的主要内容,如果未能解决你的问题,请参考以下文章

Python进阶3

深入理解 Python 虚拟机:字典(dict)的优化

python中字典dict的中的copy和deepcopy

python字典构造函数dict(mapping)解析

python中sorted函数的理解(对list列表排序,对dict字典排序)

Python中字典dict