Python 基于元组列表中的某个键组合公共值
e、 g 我喜欢这样的东西:Python 基于元组列表中的某个键组合公共值,python,dictionary,Python,Dictionary,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)),
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)]
您也可以使用来达到相同的目的。如果@Raymond的
setdefault()
对您无效,请尝试使用defaultdict(list)
对象:
来源
输出
defaultdict(,{'item2':[('21-jan',65)],'item1':[('1-jan',45),('21-jan',48)])
这并不像遍历每个值并将其添加到字典中那样简单。您必须首先检查以确保键(项1、项2)不在字典中。如果是,则必须将该值附加到现有键
给你:
defaultdict(<type 'list'>, {'item2': [('21-jan', 65)], 'item1': [('1-jan', 45), ('21-jan', 48)]})
正如上面的用户所评论的,您可以使用默认字典使生活更加简单。您的值中的
:
有什么用?谢谢@raymondHettinger,虽然我已经找到了答案,但您的答案更简洁。我的解决方案是--result={}--对于deco:--result.setdefault(k,[])。append(v)---try:--result[k]+=v--除了KeyError:--result[k]=v之外---
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)]})
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]