查找元组中元素的所有迭代并返回其对

finding all iterations of an element in a tuple and returning its pair

所以我有一个看起来像这样的元组列表:

visits_country = (['123', 'United States'], ['456', 'United States'], ['1', 'Canada'], ['24', 'Canada'], ['12', 'Mexico'])

我已经设法对所有具有第二个条目 'United States' 的第一个条目求和如下

us_visits = [x[0] for x in visits_country if x[1] == 'United States']
total_us_visits = sum(map(int, us_visits))

有没有一种方法可以自动执行此任务,这样我就不必为每个国家/地区写一整行来计算所有成对整数的总和?可能是一个函数,它将 return 一个列表,其中包含每个唯一的国家及其在原始列表中每次出现的总访问量 (visits_country)?

谢谢!

简单:

visits_country = (['123', 'United States'], ['456', 'United States'], 
                  ['1', 'Canada'], ['24', 'Canada'], ['12', 'Mexico'])

dictionary = {}

for count, country in visits_country:
    dictionary[country] = dictionary.get(country, 0) + int(count)

print dictionary

是的。最明显的方法是使用 collections.Counter or itertools.groupby,后者需要预排序。例如:

from itertools import groupby
from operator import itemgetter

visits_country.sort(itemgetter(1))
sums = [(sum(int(x) for _, x in grp), key)
        for key, grp in groupby(visits_country, itemgetter(1))]

或:

from collections import Counter

counts = Counter()
for visits, country in visits_country:
    counts[country] += int(visits)