Python 对列表中每个元组的第一个值求和
我想在元组中添加具有相同第二个值的第一个值。我已经写了代码,但是我找不到我的错误。Python 对列表中每个元组的第一个值求和,python,python-3.x,tuples,Python,Python 3.x,Tuples,我想在元组中添加具有相同第二个值的第一个值。我已经写了代码,但是我找不到我的错误。 任何想法???\uuuuu setitem\uuuuuuu都不返回,而且您的逻辑也错误。您需要根据第二个值对项目进行分类,然后将第一个值相加 您可以使用collections.defaultdict()进行分类: x = [(5,3), (8, 3), (7, 3), (5, 4), (2, 4), (3, 4)] d = {} [d.__setitem__(d.get(key1,0)+key1,key2) fo
任何想法???
\uuuuu setitem\uuuuuuu
都不返回,而且您的逻辑也错误。您需要根据第二个值对项目进行分类,然后将第一个值相加
您可以使用collections.defaultdict()
进行分类:
x = [(5,3), (8, 3), (7, 3), (5, 4), (2, 4), (3, 4)]
d = {}
[d.__setitem__(d.get(key1,0)+key1,key2) for key1,key2 in x]
print(list(d.items()))
请注意,如果列表未根据第二项进行排序,则在传递到
groupby()
函数之前,需要根据第二项对其进行排序。(在这种情况下,此解决方案与defaultdict
one相比会非常低效)\uuuuuuu setitem\uuuuuuu
返回无,而且您的逻辑也错误。您需要根据第二个值对项目进行分类,然后将第一个值相加
您可以使用collections.defaultdict()
进行分类:
x = [(5,3), (8, 3), (7, 3), (5, 4), (2, 4), (3, 4)]
d = {}
[d.__setitem__(d.get(key1,0)+key1,key2) for key1,key2 in x]
print(list(d.items()))
请注意,如果列表未根据第二项进行排序,则在传递到
groupby()
函数之前,需要根据第二项对其进行排序。(在这种情况下,与defaultdict
one相比,此解决方案效率非常低)Kasramvd已经向您介绍了您的方法不起作用的原因。您可以使用按第二个元组元素分组,然后将第一个元素和
显然,如果列表没有按第二个元组元素排序,那么必须先排序
演示
{k: sum(map(itemgetter(0), g)) for k, g in groupby(x, itemgetter(1))}
Kasramvd已经向您介绍了为什么您的方法不起作用。您可以使用按第二个元组元素分组,然后将第一个元素和 显然,如果列表没有按第二个元组元素排序,那么必须先排序 演示
{k: sum(map(itemgetter(0), g)) for k, g in groupby(x, itemgetter(1))}
我不明白您想做什么,也不确定您的解释是否比代码或其他方面更令人困惑:)请详细说明并添加您想要实现的示例在列表中使用
\uuuuuuuu setitem\uuuuuu
理解应该尖叫“这是错误的方法”请提供预期的输出,以便问题更清楚。我不明白您想做什么,也不确定您的解释是否比代码或其他方式更令人困惑:)请详细说明并添加您想要实现的示例在列表中使用\uuuuuu setitem\uuuuu
,理解应该尖叫“这是错误的方法”请提供预期结果,以便问题更清楚。
>>> from operator import itemgetter
>>> from itertools import groupby
>>> x = [(5,3), (8, 3), (7, 3), (5, 4), (2, 4), (3, 4)]
>>> {k: sum(map(itemgetter(0), g)) for k, g in groupby(x, itemgetter(1))}
{3: 20, 4: 10}