e.g
data = [ (item1, ('1-jan' ,45)) , (item2, ('21-jan',65)), (item1, ('21-jan',48))]
我喜欢这样的东西:
result = [ (item1, [('1-jan' ,45),('21-jan',48)]), (item2, [('21-jan',65)])]
确切地说,我需要最终结果
result = { item1: ('1-jan':45,'21-jan':48)), item2: ('21-jan':65)]
答案 0 :(得分:3)
您可以使用dict.setdefault()在词典中轻松创建分组:
>>> data = [ ('item1', ('1-jan' ,45)) , ('item2', ('21-jan',65)), ('item1', ('21-jan',48))]
>>> result = {}
>>> for k, v in data:
result.setdefault(k, []).append(v)
>>> result
{'item2': [('21-jan', 65)], 'item1': [('1-jan', 45), ('21-jan', 48)]}
您也可以使用collections.defaultdict来达到同样目的。
答案 1 :(得分:1)
如果@ Raymond setdefault()
不适合您,请尝试使用defaultdict(list)
对象:
data = [ ("item1", ('1-jan' ,45)) , ("item2", ('21-jan',65)), ("item1", ('21-jan',48))]
from collections import defaultdict
out = defaultdict(list)
for key,value in data:
out[key].append(value)
print out
defaultdict(<type 'list'>, {'item2': [('21-jan', 65)], 'item1': [('1-jan', 45), ('21-jan', 48)]})
答案 2 :(得分:-1)
这并不像迭代每个值并将其添加到字典那么简单。您必须检查以确保密钥(item1,item2)不在字典中。如果是,则必须将值附加到现有密钥。
你走了:
data = [ ('item1', ('1-jan' ,45)) , ('item2', ('21-jan',65)), ('item1', ('21-jan',48))]
dataDict = {}
for i in range(len(data)):
if data[i][0] not in dataDict:
dataDict[data[i][0]] = data[i][1]
else:
dataDict[data[i][0]] += data[i][1]
正如上述用户所评论的那样,您可以使用默认词典来简化生活。