通常,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)
不是一个选项。
答案 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]}