2016-08-02 4 views
1

у меня есть два словаря следующим образом:Сравнение значений двух словарей

a = {1:2, 3:4, 5:6} 
b = {1:5, 3:6, 7:1} 

Для каждого ключа в a, я хочу, чтобы проверить, если ключ существует в b, если да, то я хочу, чтобы напечатать значение как ключи, если нет, то я печатаю 0 как значение ключа в b:

for key in a.keys(): 
    if key in b.keys(): 
     print key, a[key], b[key] 
    else: 
     print key, a[key], '0' 

выход будет:

1 2 5 
3 4 6 
5 6 0 

Но я также хочу, чтобы напечатать значение ключа в b, если он не существует в a, что является противоположностью последнего утверждения, если ключ находится в b, но не в a, напечатает значение ключа в b и 0 в качестве значения ключа в a. Выход будет:

1 2 5 
3 4 6 
5 6 0 
7 0 1 

Это должно быть просто, но я не могу понять, как я могу это сделать. Благодаря!

ответ

2

Если я правильно понимаю, вы хотите, чтобы перебрать все ключи от любого словаря, и печатать их значения из двух словарей, используя '0' если ключ отсутствует в этом словаре. Нечто подобное:

for key in set(a)|set(b): 
    print key, a.get(key, '0'), b.get(key, '0') 

set(a)|set(b) является объединением множеств ключей от каждого словаря (т.е. он представляет собой набор различных ключей, либо из словаря).

dictionary.get(key, '0') возвращает '0', если ключ отсутствует в словаре.

+0

Спасибо! Как возможно, что set (a) работает без записи набора (a.keys())? – Homap

+0

@Homap Поскольку итерация через словарь повторяется через клавиши. Словарь ведет себя как контейнер для своих ключей. Это также относится к 'для k в mydict' и' if k in mydict'. – khelwood

0

Использовать метод b метода dict, задавая значение по умолчанию для использования, когда ключ не найден.

for key in a: 
    print key, a[key], b.get(key, '0') 
+0

Как это показать ключи, которые находятся в 'b', но не в' a'? –

+0

Я предполагал, что читатель сможет расширить рецепт поиска ключей в 'a', но не в' b', чтобы рецепт поиска ключей в 'b', но не в' a'. Моя ошибка ... – holdenweb

2
for key in set(a.keys()) | set(b.keys()): 
    print key, a.get(key, 0), b.get(key,0) 

| означает объединение в контексте набора. Вы также можете преобразовать полученный набор в список и отсортировать его перед итерацией.

+0

Просто, чтобы вы знали, что в Python 3 вам не нужно преобразовывать результаты 'dict.keys' в набор. –

Смежные вопросы