Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于元组列表中的某个键组合公共值_Python_Dictionary - Fatal编程技术网

Python 基于元组列表中的某个键组合公共值

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)),

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)]

您也可以使用来达到相同的目的。

如果@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]