Выполнять поиск между словарями - PullRequest
0 голосов
/ 17 июня 2020

У меня есть несколько словарей в переменной под названием stats

print (stats)
{'CAT1': [{'Fruit': 'Apple', 'Sound': 'Meow', 'Sleep': 'Normal', 'Color': 'blue', 'Eye': 'blue', 'Tail': 'Short'}]}
{'CAT2': [{'Fruit': 'Orange', 'Sound': 'Meow', 'Sleep': 'Less', 'Color': 'orange', 'Eye': 'black', 'Tail': 'long'}]}
{'CAT3': [{'Fruit': 'Mango', 'Sound': 'Meow', 'Sleep': 'Abnormal', 'Color': 'blue', 'Eye': 'black', 'Tail': 'Short'}]}
{'CAT4': [{'Fruit': 'Peach', 'Sound': 'Meow', 'Sleep': 'Normal', 'Color': 'yellow', 'Eye': 'black', 'Tail': 'short'}]}

и у меня есть другой владелец словаря

print(Owner)
{'CAT1': ['this cat belongs to YZMIKE'], 'CAT2': ['this cat belongs to AAJOHN'], 'CAT3': ['this cat belongs to FPROB'], 'CAT4': ['this cat belongs to LDKATE']}

Я хочу выполнить поиск на основе KEY в обоих словарях, чтобы вывод был ниже

{
'this cat belongs to YZMIKE':[{'Fruit': 'Apple', 'Sound': 'Meow', 'Sleep': 'Normal', 'Color': 'blue', 'Eye': 'blue', 'Tail': 'Short'}]
'this cat belongs to AAJOHN':[{'Fruit': 'Orange', 'Sound': 'Meow', 'Sleep': 'Less', 'Color': 'orange', 'Eye': 'black', 'Tail': 'long'}]
'this cat belongs to FPROB':[{'Fruit': 'Mango', 'Sound': 'Meow', 'Sleep': 'Abnormal', 'Color': 'blue', 'Eye': 'black', 'Tail': 'Short'}]
'this cat belongs to LDKATE':[{'Fruit': 'Peach', 'Sound': 'Meow', 'Sleep': 'Normal', 'Color': 'yellow', 'Eye': 'black', 'Tail': 'short'}]
}

Оцените вашу помощь ... Я новичок в python и не уверен, как я могу выполнить этот поиск ..

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Вот как:

stats = {'CAT1': [{'Fruit': 'Apple', 'Sound': 'Meow', 'Sleep': 'Normal', 'Color': 'blue', 'Eye': 'blue', 'Tail': 'Short'}],
         'CAT2': [{'Fruit': 'Orange', 'Sound': 'Meow', 'Sleep': 'Less', 'Color': 'orange', 'Eye': 'black', 'Tail': 'long'}],
         'CAT3': [{'Fruit': 'Mango', 'Sound': 'Meow', 'Sleep': 'Abnormal', 'Color': 'blue', 'Eye': 'black', 'Tail': 'Short'}],
         'CAT4': [{'Fruit': 'Peach', 'Sound': 'Meow', 'Sleep': 'Normal', 'Color': 'yellow', 'Eye': 'black', 'Tail': 'short'}]}


Owner = {'CAT1': ['this cat belongs to YZMIKE'],
         'CAT2': ['this cat belongs to AAJOHN'],
         'CAT3': ['this cat belongs to FPROB'],
         'CAT4': ['this cat belongs to LDKATE']}

d = {Owner[v1][0]:stats[v2] for v1,v2 in zip(Owner.keys(),stats.keys()) if v1==v2}

print(d)

Вывод:

{ 'this cat belongs to YZMIKE':[{'Fruit': 'Apple', 'Sound': 'Meow', 'Sleep': 'Normal', 'Color': 'blue', 'Eye': 'blue', 'Tail': 'Short'}],
  'this cat belongs to AAJOHN':[{'Fruit': 'Orange', 'Sound': 'Meow', 'Sleep': 'Less', 'Color': 'orange', 'Eye': 'black', 'Tail': 'long'}],
  'this cat belongs to FPROB':[{'Fruit': 'Mango', 'Sound': 'Meow', 'Sleep': 'Abnormal', 'Color': 'blue', 'Eye': 'black', 'Tail': 'Short'}],
  'this cat belongs to LDKATE':[{'Fruit': 'Peach', 'Sound': 'Meow', 'Sleep': 'Normal', 'Color': 'yellow', 'Eye': 'black', 'Tail': 'short'}] }
1 голос
/ 17 июня 2020

Я думаю, что в вашем вопросе проблема с форматами данных. Похоже, у вас есть два словаря с одинаковыми ключами, поэтому, если вы хотите создать словарь, который заменяет ключи в dict 1 значениями, найденными в списке в dict 2:

new_dict = dict((Owner[x][0],stats[x]) for x in stats)

или быть дополнительный сейф:

new_dict = dict((Owner[x][0],stats[x]) for x in stats if x in Owner)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...