Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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_List_Tuples - Fatal编程技术网

Python 如果值相同,则求和元组

Python 如果值相同,则求和元组,python,list,tuples,Python,List,Tuples,下面是我的元组列表: regions = [(23.4, 12, 12341234), (342.23, 19, 12341234), (4312.3, 12, 12551234), (234.2, 12, 12341234)] 我试图对元组列表中的第一个索引值求和,其中索引1和2处的值相同。请注意,区域[0]和区域[3]在索引1和2处具有相同的值 我想要的清单是: result = [(257.6, 12, 123412

下面是我的元组列表:

regions = [(23.4, 12, 12341234), 
           (342.23, 19, 12341234), 
           (4312.3, 12, 12551234), 
           (234.2, 12, 12341234)]
我试图对元组列表中的第一个索引值求和,其中索引1和2处的值相同。请注意,区域[0]和区域[3]在索引1和2处具有相同的值

我想要的清单是:

result = [(257.6, 12, 12341234), 
          (342.23, 19, 12341234), 
          (4312.3, 12, 12551234)]
我意识到我可能首先需要将它保存为字典,可能第二个值作为第一个键,第三个值作为第二个键,如果它已经存在,则进行求和。只是想知道是否有更好或更简单的方法:我想也许可以使用一些相交函数

from collections import defaultdict

sums = defaultdict(float)
for c, a, b in regions:
    sums[a, b] += c
result = [(csum, a, b) for (a, b), csum in sums.iteritems()]

没有一个内置的函数来实现这一点;这是一项过于专业化的任务。

结果中元组的顺序重要吗?请告诉我-而且更完整:)并且
.iteritems()
.items()
更好/不同吗?
.iteritems()
适用于Python 2,我相信返回了一个生成器。在Python 3中,
.iteritems()
不存在@Bozdoz你可以放下
()
。元组由逗号(
)创建:
用于区域中的A、b、c:results[b、c]+=A
。您还可以在for循环中解包:
result=[(a,b,c)for(b,c),a在sums.items()中解包。
。或
result=[(a,)+t表示t,a表示总和。items()]