Skrypt w języku Python do porównywania kluczy 2 słowników i równej wartości wydruku klucza 2. słownika

0

Mam na przykład 2 słowniki:

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

Muszę porównać klucze 2 słowników i jeśli są one równe, muszę wydrukować odpowiednią wartość klucza 2. słownika. Na przykład oba słowniki mają klucz 1 i 3, więc muszę wydrukować odpowiednią wartość w drugim słowniku, tzn. Powinien wydrukować yi u. Jak do tego napisać skrypt Pythona? Próbowałem czegoś takiego:

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

Ale nie otrzymuję danych wyjściowych.

użytkownik999
źródło

Odpowiedzi:

2

To byłoby lepiej zapytać na StackOverflow.

Oto najbardziej pythonowy sposób:

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}

Ten kod Pythona używa rozumienia słownikowego do iteracji d1kluczy, a jeśli klucz jest w obu, d1i d2zapisz klucz d3z wartością z d2.

Oto wynik interpretera Pythona:

>>> 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}

Uwaga: nie musisz dzwonić d1.keys(), ale jest to dobra praktyka. Celowo nie dzwoniłem .keys().

Charles Addis
źródło
0

Sformatowałem Twój kod poprawnie i przetestowałem i działał dla mnie. Nie jestem pewien, dlaczego nie widziałeś żadnych wyników.

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)

Chociaż nie jest najbardziej wydajnym kodem, działa.

Dla czegoś bardziej wydajnego sugerowałbym ten sam kod, który zapewnia grawitacja:

def compare2(dictOne,dictTwo):
    for key in dictOne:
        if key in dictTwo:
            print(dictTwo[key])
JeHor
źródło
-1
for key in dictTwo:
    if key in dictOne:
        print(key, "=", dictTwo[key])
grawitacja
źródło
1
Chociaż może to odpowiedzieć na pytanie, lepszym rozwiązaniem byłoby wyjaśnienie, dlaczego tak się dzieje.
DavidPostill