Python字典如何创build密钥或追加一个元素的关键?

我是Python新手。 我不仅学习它的function,types等,而且我正在学习Pythonic的做法,因此我的问题是:

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

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

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

将来当这个密钥再次出现时,由于它存在,我想要再次附加这个值。

我的代码包含这个:

获得关键和价值。

dict_x是否存在NOT键。

如果不创build它: dict_x[key] == []

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

这是做到这一点的方法吗? 我应该尝试使用try/except块吗?

使用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 

这里有各种方法来做到这一点,所以你可以比较它的外观和select你喜欢的东西。 我已经用一种我认为是最“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()的创build。

使用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] 

您可以在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) 

你可以使用这个defaultdict 。

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

这比setdefault更有效率,因为你最终不会创build最终没有使用的新列表。 每次调用setdefault都会创build一个新列表,即使该项目已经存在于字典中。