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

dict = {1 : a, 2 : b, 3 : c, 4 : d} 
dict1= {5 : z, 1 : y, 6 : x, 3 : u}

Мне нужно сравнить ключи двух словарей, и если они равны, я должен напечатать соответствующее значение ключа 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])

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

3 ответа3

1

Это лучше спросить на 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 = {key:d2[key] for key in d1 if key in d2}

Этот код 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 = {k:d2[k] for k in d1 if k in d2}
>>> d3
{'d': -12, 'b': 0}

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

0

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

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

dict1 = {1 : 'a', 2 : 'b', 3 : 'c', 4 : 'd'}
dict2= {5 : 'z', 1 : 'y', 6 : 'x', 3 : 'u'}
compare(dict1,dict2)

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

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

def compare2(dictOne,dictTwo):
    for key in dictOne:
        if key in dictTwo:
            print(dictTwo[key])
-1
for key in dictTwo:
    if key in dictOne:
        print(key, "=", dictTwo[key])

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .