Как управлять словарем Python с тремя элементами и добавить последний? - PullRequest
0 голосов
/ 08 августа 2011

У меня есть словарь на python, например:

x = {страна: {город: население}: ......}

, и я хочу создать новый словарькак у = {страна: городов_популяция}, где города_популяция добавляет все население в каждом городе в каждой стране, и я действительно не знаю, как это сделать.

Я пробовал это:

for country in x:
 for city, population in x[country].iteritems():
  if not country in y:
   y[country] = {}
  y[country] += population

Я проверяю словарь только с одним ключом и одним значением, но я не понимаю, как управлять словарем из трех элементов ... помогите мне, пожалуйста !!!!:)

Ответы [ 4 ]

2 голосов
/ 08 августа 2011

Ну, как насчет:

 y = {  }
 for country, cities in x.iteritems():
     y[country] = sum(cities.values())
1 голос
/ 08 августа 2011

Я предполагаю, что вы хотите подвести итог больше, чем просто население городов для каждой страны:

>>> attributes = ['population', 'gdp', 'murders']
>>> x = {'usa': {'chicago': dict(zip(attributes, [10, 100, 1000])), 'nyc':dict(zip(attributes, [20, 200, 2000]))}, 'china': {'shanghai': dict(zip(attributes, [9, 90, 900])), 'nagasaki': dict(zip(attributes, [2, 20, 200]))}}
>>> x
{'china': {'shanghai': {'gdp': 90, 'murders': 900, 'population': 9}, 'nagasaki': {'gdp': 20, 'murders': 200, 'population': 2}}, 'usa': {'nyc': {'gdp': 200, 'murders': 2000, 'population': 20}, 'chicago': {'gdp': 100, 'murders': 1000, 'population': 10}}}

>>> for country, cities in x.iteritems():
        y[country] = {attr:0 for attr in attributes}
        for city, attributes in cities.iteritems():
            for attribute, value in attributes.iteritems():
                y[country][attribute] += value

>>> y
{'china': {'gdp': 110, 'murders': 1100, 'population': 11}, 'usa': {'gdp': 300, 'murders': 3000, 'population': 30}}
0 голосов
/ 08 августа 2011

Вам нужен новый словарь , ключом которого является оригинальный ключ , а значением является сумма значений в текущем словаре значений .

y = dict((c[0], sum(c[1].values())) for c in x.iteritems())
0 голосов
/ 08 августа 2011

Как насчет чего-то вроде:

for country in x:
    total_population = 0
    for city, population in x[country].iteritems():
        total_population += population
    y[country] = total_population
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...