2016-12-13 3 views
-1

Я довольно новичок в Python и только начал работать со словарями. У меня следующий вопрос:Совокупные значения в словаре по ключу

Учитывая следующий словарь:

{'Berlin': {'Country': 'Germany', 'Population': 3.502}, 
'New York': {'Country': 'USA', 'Population': 8.406}, 
'Munich': {'Country': 'Germany', 'Population': 1.388}, ... } 

Как я мог подвести население по странам? Спасибо!

ответ

2
country_to_population = {} 
for city, data in dict.iteritems(): 
    country = data['Country'] 
    if country not in country_to_population: 
     country_to_population[country] = 0 
    country_to_population[country] += data['Population'] 

Вы перебираете основной словарь и добавляете популяцию в новый словарь, который отображает страну в популяцию.

Если используется Python 3, сделайте items() вместо iteritems().

+0

@ yper. Большое спасибо за ваш вклад. Это именно то, что я искал. –

1

Вы можете зайти внутрь Dict итерации по ключу:

dict = {'Berlin': {'Country': 'Germany', 'Population': 3502}, 
'New York': {'Country': 'USA', 'Population': 8406}, 
'Munich': {'Country': 'Germany', 'Population': 1388}} 
country = [] 
sum = {} 
for key in dict: 
    coun = dict[key]['Country'] 
    if coun in country: 
     pass 
    else: 
     country.append(dict[key]['Country']) 
     sum[coun] = 0 

    sum[coun] += dict[key]['Population'] 

for key in sum: 
    print(key, sum[key])  
1

Вы можете использовать defaultdict из модуля коллекций, с int присвоенного ему для того, чтобы иметь значение по умолчанию 0 для каждой страны, которую вы собираетесь подвести.

код выглядит следующим образом:

from collections import defaultdict 

country_dict = {"Berlin":{"Country":"Germany","Population":3.502},"Munich":{"Country":"Germany","Population":1.388},"New York":{"Country":"USA","Population":8.406}} 

sum_countries_dict = defaultdict(int) 
for item in country_dict.values(): 
    sum_countries_dict[item['Country']] += item['Population'] 

И результат:

>>> country_dict 
{'Berlin': {'Country': 'Germany', 'Population': 3.502}, 'New York': {'Country': 'USA', 'Population': 8.406}, 'Munich': {'Country': 'Germany', 'Population': 1.388}} 
>>> sum_countries_dict 
defaultdict(<type 'int'>, {'Germany': 4.89, 'USA': 8.406}) 
>>> sum_countries_dict['Germany'] 
4.89 
>>> sum_countries_dict['USA'] 
8.406 
1

Вы можете использовать itertools.groupby() сгруппировать данные по стране, как показано ниже:

from itertools import groupby 

my_dict = {'Berlin': {'Country': 'Germany', 'Population': 3.502}, 'New York': {'Country': 'USA', 'Population': 8.406}, 'Munich': {'Country': 'Germany', 'Population': 1.388}} 

population = {} 

for k,v in groupby(sorted(my_dict.items()), key=lambda i:i[1]['Country']): 
    population[k] = sum(item[1]['Population'] for item in list(v)) 

Выход :

>>> population 
{'Germany': 4.89, 'USA': 8.406}