как найти совпадение в словаре - PullRequest
0 голосов
/ 14 октября 2018

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

Итак, я попробовал это

RFQDict = {}
AwardsDict = {}

# Fetch RFQ 

RFQref = db.reference('TestRFQ')

snapshot = RFQref.get()
for key, val in snapshot.items():
    RFQDict[key] = val
    print('{0} => {1}'.format(key, val))


Awardsref = db.reference('DibbsAwards')

dsnapshot = Awardsref.get()
for key, val in dsnapshot.items():
    AwardsDict[key] = val
    print('{0} => {1}'.format(key, val))



for key in RFQDict:
    if key in AwardsDict.values():
        print(key+ " Match found")

Это способ сделать это или есть лучший способ и как можно вернуть ключ и значения, где совпадение было найдено?

Ответы [ 3 ]

0 голосов
/ 14 октября 2018

Если вы хотите сохранить ключи и значения, которые соответствуют, вероятно, было бы лучше сохранить ключ и значение из второго словаря, так как, если вы просто сохраните соответствующий ключ и значение, у вас будут такие элементы, как (a, a), который выигрална самом деле не много расскажу о том, где они соответствовали во втором словаре.Может быть, что-то вроде этого

d1 = {'a': 1, 'b': 2, 'c': 3}
d2 = {'x': 'a', 'y': 1, 'z': 'c'}

res = [(i, {j: d2[j]}) for i in d1 for j in d2 if i == d2[j]]
print(res)
# [('a': {'x': 'a'}), ('c': {'z': 'c'})]
0 голосов
/ 15 октября 2018

Я бы сделал понимание списка:

result=[x for x in AwardsDict.values() if x in RFQDict.keys() ]

Таким образом, вы получите список, содержащий дубликаты.То есть, если ключ RFQ представлен более чем в одном значении в AwardsDict.С оператором & вы теряете эту информацию (поскольку наборы содержат только уникальные элементы).

Например:

RFQDict = {}
AwardsDict = {}

for i in range(5):
    RFQDict[i]=0

for i in range(5):
    AwardsDict[i]=i

for i in range(5,11):
    AwardsDict[i]=i//2 #integer division, i=8 and i=9 get a value of 4 


result=[x for x in AwardsDict.values() if x in RFQDict.keys() ]
print('{}'.format(result))

#output [0, 1, 2, 3, 4, 2, 3, 3, 4, 4]
0 голосов
/ 14 октября 2018

В python3 вы можете сделать AwardsDict.values() & RFQDict.keys(), и вы получите набор с общим ключом / значениями.

Оператор '&' используется для пересечения множеств и работает с представлениями словаря, возвращаемыми значениями () и ключами ().Дополнительная информация о представлении, возвращаемом этими методами: https://docs.python.org/3/library/stdtypes.html?highlight=dictview#dictionary-view-objects

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