查找元组中元素的所有迭代并返回其对
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)
所以我有一个看起来像这样的元组列表:
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)