Script Python para comparar as chaves de 2 dicionários e se for igual ao valor de impressão da chave do segundo dicionário

0

Eu tenho 2 dicionários por exemplo:

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

Eu preciso comparar as chaves de 2 dicionários e, se forem iguais, tenho que imprimir o valor correspondente da segunda chave do dicionário. Por exemplo, ambos os dicionários têm 1 e 3 como sua chave, então eu tenho que imprimir seu valor correspondente no segundo dicionário, ou seja, ele deve imprimir y e u . Como escrever o script python para isso? Eu tentei algo como:

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

Mas eu não estou recebendo a saída.

    
por user999 25.11.2015 / 11:45

3 respostas

1

Isso seria melhor perguntado no StackOverflow.

Aqui está a maneira mais pythonic de fazer isso:

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}

Este código python usa uma compreensão de dicionário para iterar pelas chaves de d1 e, se a chave estiver em d1 e d2 , armazene a chave em d3 com o valor de d2 .

Aqui está o resultado no interpretador 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}

Nota: você não precisa chamar d1.keys() , mas é uma boa prática. Eu intencionalmente não chamei .keys() .

    
por 08.01.2016 / 20:46
0

Formatei seu código corretamente e testei e funcionou para mim. Não sei por que você não estava vendo nenhuma saída.

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)

Embora não seja o código mais eficiente, funciona.

Para algo mais eficiente, eu sugeriria o mesmo código que a grawity forneceu:

def compare2(dictOne,dictTwo):
    for key in dictOne:
        if key in dictTwo:
            print(dictTwo[key])
    
por 08.01.2016 / 20:38
-1
for key in dictTwo:
    if key in dictOne:
        print(key, "=", dictTwo[key])
    
por 25.11.2015 / 13:37