2016-10-04 1 views
-1

Я пытаюсь обрабатывать значения из двух разных словарей в Python. Что мне нужно сделать, это работать со значениями, которые имеют один и тот же ключ в обоих словарях.итерационные словари в Python 3.x

Например, если словари:

d1 = {1:30, 2:20, 3:30, 5:80} 
d2 = {1:40, 2:50, 3:60, 4:70, 6:90} 

Мне нужно добавить значения из ключей 1, 2 и 3 из каждого словаря.

Я пытаюсь сделать итератор ценностей, но, когда я пытаюсь расширить пустую итерацию со значениями с линией, такие как:

sameKeys.extend(d1[i])) 

я получаю ключ ошибки. Я пробовал много разных синтаксисов, но никто не работал.

+1

Что такое 'sameKeys'? –

+1

Измените свой вопрос и сделайте свое намерение более ясным, 'sameKeys' - это что? Что он должен содержать? Что вы делали до сих пор? –

+0

Вы добавляете их в новый dict? к первому? или просто распечатать результат? –

ответ

0

Вот один вариант:

d1 = {1:30, 2:20, 3:30, 5:80} 
d2 = {1:40, 2:50, 3:60, 4:70, 6:90} 

dlist = [d1, d2] 


# As a dict comprehension 
result = {k: sum(d[k] for d in dlist) 
      for k in set.intersection(*[set(d) for d in dlist])} 
print result 

# Same as above, but as for loops 
result = {} 
repeated_keys = set(d1) 
for d in dlist: 
    repeated_keys &= set(d) 
for k in repeated_keys: 
    result[k] = 0 
    for d in dlist: 
     result[k] += d[k] 
print result 
+1

Так как это Python 3, вы можете использовать ключи напрямую в качестве наборов. {} .keys() - это набор. – dawg

1

Вы можете попробовать, как это,

for i,j in zip(d1.items(),d2.items()): 
    if i[0] == j[0]: 
     print i[1]+j[1] 

Результат

70 
70 
90 
1

Итерация по любому из Dict. Проверьте, существует ли ключ во втором списке. Если он существует, введите запись в новый dict. Ниже приведен пример пример:

>>> d1 = {1:30, 2:20, 3:30, 5:80} 
>>> d2 = {1:40, 2:50, 3:60, 4:70, 6:90} 
>>> d3 = {} 
>>> for key, value in d1.items(): 
...  if key in d2: 
...   d3[key] = value + d2[key] 
... 
>>> d3 
{1: 70, 2: 70, 3: 90} 
>>>