Python dict如何创建键或将元素附加到键?

时间:2012-10-16 00:42:07

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

我有一本空字典。姓名:dict_x 它的键值是列表。

从单独的迭代中,我获得了一个键(例如:key_123),以及一个项目(一个元组),放在dict_x的值key_123列表中。

如果此密钥已存在,我想附加此项目。 如果这个键不存在,我想用空列表创建它,然后追加到它或者只是用一个元组创建它。

将来再次出现此密钥时,由于它存在,我希望再次附加该值。

我的代码由以下内容组成:

  

获取关键和价值。

     

查看dict_x中是否存在 NOT 键。

     

如果没有创建它:dict_x[key] == []

     

之后:dict_x[key].append(value)

这是这样做的吗?我应该尝试使用try/except块?

5 个答案:

答案 0 :(得分:191)

使用dict.setdefault()

dic.setdefault(key,[]).append(value)

帮助(dict.setdefault)

    setdefault(...)
        D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D

答案 1 :(得分:50)

以下是执行此操作的各种方法,以便您可以比较它的外观并选择您喜欢的内容。我已经按照我认为最多“pythonic”的方式对它们进行了排序,并评论了乍一看可能并不明显的优点和缺点:

使用collections.defaultdict

import collections
dict_x = collections.defaultdict(list)

...

dict_x[key].append(value)

优点:可能性能最佳。缺点:Python 2.4.x中不可用。

使用dict().setdefault()

dict_x = {}

...

dict_x.setdefault(key, []).append(value)

缺点:低效创建未使用的list()

使用try ... except

dict_x = {}

...

try:
    values = dict_x[key]
except KeyError:
    values = dict_x[key] = []
values.append(value)

或者:

try:
    dict_x[key].append(value)
except KeyError:
    dict_x[key] = [value]

答案 2 :(得分:17)

您可以使用defaultdict

from collections import defaultdict
d = defaultdict(list)
d['key'].append('mykey')

这比setdefault略高一些,因为您最终不会创建最终未使用的新列表。每次调用setdefault都会创建一个新列表,即使该项已存在于字典中。

答案 3 :(得分:10)

您可以在collections中使用defaultdict

doc的一个例子:

s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d = defaultdict(list)
for k, v in s:
    d[k].append(v)

答案 4 :(得分:1)

dictionary['key'] = dictionary.get('key', []) + list_to_append