附加到字典值,pythonesque解决方案

时间:2014-03-14 15:14:39

标签: python dictionary

通常,T在python中形成一个字典,其键是动态插入的,值是某种列表:

dc = {'foo': [1,2,3], 'bar': [2,3,4]}

然而,这样的词典的产生对我来说是个问题。例如,假设我正在浏览此列表:

l = [('foo', 1),('foo', 2),('foo', 3), ('bar', 2), ('bar', 3), ('bar', 4)]

我希望我的程序从上面生成dc字典。现在,我唯一的代码是:

dc = {}
for key, value in l:
    if dc.has_key(key):
         dc[key].append(value)
    else:
         dc[key] = value

有更多pythonesque方式吗?这里有很多代码可以真正被压缩成一条简单的线,而不是繁琐和/或慢......

修改上面的列表l可供说明。事实上,我经常浏览一个大文件并在文件的每一行中找到一个键值对,因此调用dict(l)不是一个选项。

2 个答案:

答案 0 :(得分:5)

from collections import defaultdict
dc = defaultdict(list)
for key, value in l:
    dc[key].append(value)
print dc
# defaultdict(<type 'list'>, {'foo': [1, 2, 3], 'bar': [2, 3, 4]})

您可以像使用普通字典一样使用它。但是如果你想将它转换成字典,那么你就这样做了

print dict(dc)
# {'foo': [1, 2, 3], 'bar': [2, 3, 4]}

答案 1 :(得分:2)

您也可以使用setdefault功能。

>>>dc = {}
>>>for key, value in l:
>>>     dc.setdefault(key,[]).append(value)

>>>dc
{'bar': [2, 3, 4], 'foo': [1, 2, 3]}