我有一个模式列表,如下所示:
list=[('a',2),('b',4),('a',1),('c',6)]
我想做的是将其转换为使用每对的第一个值作为键的字典,我还想将具有相同键的对连接起来。对于上面的结果将是:
dict={ 'a':[2,1] , 'b':[4] , 'c':[6] }
我不关心连接值的顺序,这意味着我们也可以有'a':[1,2]
如何在python中实现?
这样做:
l = [('a',2),('b',4),('a',1),('c',6)]
d = {}
for item in l:
if item[0] in d:
d[item[0]].append(item[1])
else:
d[item[0]] = [item[1]]
print(d) # {'a': [2, 1], 'b': [4], 'c': [6]}
为了更简洁,你可以使用defaultdict
和2for
迭代器:
from collections import defaultdict
l = [('a',2),('b',4),('a',1),('c',6)]
d = defaultdict(lambda: [])
for key, val in l:
d[key].append(val)
print(dict(d)) # {'a': [2, 1], 'b': [4], 'c': [6]})
您也可以在dict
上使用setdefault
方法,如果键尚未在字典中,则将列表设置为默认条目:
l=[('a',2),('b',4),('a',1),('c',6)]
d = {}
for k, v in l:
d.setdefault(k, []).append(v)
d
{'a': [2, 1], 'b': [4], 'c': [6]}