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一个新列表,即使该项目已经存在于字典中。