Проверка на точные совпадения в двух словарях - PullRequest
1 голос
/ 09 апреля 2020

У меня есть несколько словарей, некоторые из которых состоят из данных, а другой имеет значения, которые я хочу проверить на соответствие в словарях данных.

data = {a: '1', b: '2', c: '3', d: '4', e: '5', f: '6', g: '7'}
desiredValues = {b: '2', e: '1', g: '7'} 

Для соответствующих ключей в каждом словаре я хочу сравнить значения и посмотреть, совпадают ли они или нет. Если 1 или более значений не совпадают, я хочу знать, какие из них. В конечном счете, я бы хотел иметь какую-то настройку, в которой я мог бы сравнивать несколько словарей данных с одним словарем требуемых значений и получать выходные данные для каждого из них по строкам:

b = True
e = False
g = True 

Спасибо, что нашли время, чтобы прочитать мой вопрос! Извините, если это довольно просто, я просто не смог найти четкого способа сделать это.

Ответы [ 5 ]

2 голосов
/ 09 апреля 2020

Выполните итерацию по desiredValues, затем проверьте, находится ли ключ в data, используя data[key], где key - текущий ключ из desiredValues:

data = {'a': '1', 'b': '2', 'c': '3', 'd': '4', 'e': '5', 'f': '6', 'g': '7'}
desiredValues = {'b': '2', 'e': '1', 'g': '7', 'z':'shouldn\'t be in data'} 

for key, value in sorted(desiredValues.items(), key=lambda i: i[0]):
    if key in data:
        print('{}:'.format(key), value == data[key])
    else:
        print('{}:'.format(key), 'not in data')

Вывод:

b: True
e: False
g: True
z: not in data
1 голос
/ 09 апреля 2020
print(data.keys() & desiredValues.keys()) # the intersection of keys sets
for key, _ in data.items():
    if key in desiredValues:
        print(f'{key}: True')
    else:
        print(f'{key}: False')

выход:

{'g', 'b', 'e'}
a: False
b: True
c: False
d: False
e: True
f: False
g: True
1 голос
/ 09 апреля 2020

Основа c for l oop с условием if сделает трюк:

In [144]: for key ,value in desiredValues.items(): 
     ...:     if desiredValues[key] == data[key]: 
     ...:         print('{}= True'.format(key)) 
     ...:     else: 
     ...:         print('{}= False'.format(key)) 
     ...:                                                                                                                                                                                                   
b= True
e= False
g= True

ИЛИ

In [143]: for key, value in data.items(): 
     ...:     if key in desiredValues: 
     ...:         if data[key] == desiredValues[key]: 
     ...:             print('{}= True'.format(key)) 
     ...:         else: 
     ...:             print('{}= False'.format(key)) 
     ...:                                                                                                                                                                                                   
b= True
e= False
g= True
1 голос
/ 09 апреля 2020

Одним из способов может быть проверка членства путем итерации по desiredValues dict_items и построения set из data для более быстрого поиска:

set_data = set(data.items()) 

[i in set_data for i in desiredValues.items()]
# [True, False, True]
1 голос
/ 09 апреля 2020

Вы можете попробовать это.

for k in desiredValues:
    print(f' {k}={data[k]==desiredValues[k]}')

Вывод:

 b=True
 e=False
 g=True
...