我有两个字典,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")
这是这样做的方法还是有更好的方法,如何返回找到匹配项的键和值?
答案 0 :(得分:4)
在python3中,您可以执行AwardsDict.values() & RFQDict.keys()
,然后将获得带有公共键/值的集合。
“&”运算符用于设置交集,并与由values()和keys()返回的字典视图一起使用。这些方法返回的视图的更多信息:https://docs.python.org/3/library/stdtypes.html?highlight=dictview#dictionary-view-objects
答案 1 :(得分:0)
如果要存储匹配的键和值,则最好存储第二个字典中的键和值,因为如果仅存储匹配的键和值,则将具有(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'})]
答案 2 :(得分:0)
我会进行列表理解:
result=[x for x in AwardsDict.values() if x in RFQDict.keys() ]
通过这种方式,您可以获得包含重复项的列表。也就是说,如果在AwardsDict中以多个值显示RFQ键。使用&运算符,您会丢失该信息(因为集合仅具有唯一元素)。
例如:
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]