Скрипт Python для сравнения ключей 2-х словарей и, если равен, вывести значение ключа 2-го словаря

16099
user999

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

dict =  dict1=  

Мне нужно сравнить ключи двух словарей, и если они равны, я должен напечатать соответствующее значение ключа 2-го словаря. Например, оба словаря имеют 1 и 3 в качестве ключа, поэтому я должен напечатать их соответствующее значение во 2-м словаре, т.е. он должен печатать yи u. Как написать скрипт Python для этого? Я пробовал что-то вроде:

def compare(dictOne,dictTwo): for keyOne in dictOne: for keyTwo in dictTwo: if keyOne == keyTwo: print(dictTwo[keyTwo]) 

Но я не получаю вывод.

0

3 ответа на вопрос

1
Charles Addis

Это лучше спросить на StackOverflow.

Вот самый питонный способ сделать это:

d1 = {'a': 10, 'b': 20, 'c': 30, 'd': 40} d2 = {'z': 260, 'd': -12, 'r': 1, 'b': 0}  # Use a dictionary comprehension to collect d2 values of shared key d3 =  

Этот код Python использует словарное понимание для перебора d1ключей и, если ключ находится в обоих, d1и d2сохраняет ключ d3со значением из d2.

Вот результат в интерпретаторе Python:

>>> d1 = {'a': 10, 'b': 20, 'c': 30, 'd': 40} >>> d2 = {'z': 260, 'd': -12, 'r': 1, 'b': 0} >>> d3 =  >>> d3 {'d': -12, 'b': 0} 

Примечание: вам не нужно звонить d1.keys(), но это хорошая практика. Я намеренно не звонил .keys().

0
JeHor

Я правильно отформатировал твой код и проверил, и он работал для меня. Я не уверен, почему вы не видите результатов.

def compare(dictOne,dictTwo): for keyOne in dictOne: for keyTwo in dictTwo: if keyOne == keyTwo: print(dictTwo[keyTwo])  dict1 =  dict2=  compare(dict1,dict2) 

Хотя это не самый эффективный код, он работает.

Для чего-то более эффективного я бы предложил тот же код, который предоставил grawity:

def compare2(dictOne,dictTwo): for key in dictOne: if key in dictTwo: print(dictTwo[key]) 
-1
grawity
for key in dictTwo: if key in dictOne: print(key, "=", dictTwo[key]) 
Хотя это может ответить на вопрос, было бы лучше ответить, если бы вы могли дать какое-то объяснение ** почему ** это так. DavidPostill 8 лет назад 1