Найти одинаковые значения между 2 списками словарей с разными ключами - PullRequest
0 голосов
/ 10 марта 2020

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

list_1 = [{a:'cat', b:'dog', c:'bird'},{a:'**mouse**', b:'lizard', c:'fish'},{a:'**hen**', b:'pony', c:'frog'}]
list_2 = [{x:'goat', y:'**mouse**', z:'horse'},{x:'horse', y:'**hen**', z:'tiger'},{x:'bee', y:'fly', z:'toad'}]

Значение 'мышь' и значение 'курица' присутствуют в обоих списках словарей, но оба значения имеют уникальные ключи.

Как найти, где значения словаря совпадают между list_1 и list_2, когда в этом примере ключи для «мыши» и ключи для «курицы» в обоих списках различны?

Я попытался найти похожие посты и нашел, что это сравнение сделано только с соответствующими ключами. (пример: в обоих списках «курица» будет иметь ключ «а» и «мышь», значение «c»)

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

Я сделал функцию, чтобы получить все уникальные значения для списка диктов.

def unique_values_from_list(dict_list):
    all_values = set()
    for dictionary in dict_list:
        all_values.update(dictionary.values())
    return all_values

Используя этот код, мы можем получить два набора уникальных значений и найти пересечение этих двух наборов:

list_1 = [{'a':'cat', 'b':'dog', 'c':'bird'},{'a':'mouse', 'b':'lizard', 'c':'fish'},{'a':'hen', 'b':'pony', 'c':'frog'}]
list_2 = [{'x':'goat', 'y':'mouse', 'z':'horse'},{'x':'horse', 'y':'hen', 'z':'tiger'},{'x':'bee', 'y':'fly', 'z':'toad'}]

unique1 = unique_values_from_list(list_1)
unique2 = unique_values_from_list(list_2)

print(unique1)
print(unique2)
intersection = unique1.intersection(unique2)
print(intersection)

Где мои результаты из этого будут:

unique1: {'fish', 'cat', 'frog', 'dog', 'lizard', 'hen', 'pony', 'bird', 'mouse'}
unqiue2: {'goat', 'fly', 'horse', 'hen', 'toad', 'mouse', 'tiger', 'bee'}
intersection: {'hen', 'mouse'}
0 голосов
/ 10 марта 2020
def get_values(list_of_dict):
    a = set()
    for a_dict in list_of_dict:
        a.update(a_dict.values())
    return a

print(get_values(listA).intersection(get_values(listB)))

может быть?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...