将dictionary和tuple进行比较,并返回最匹配的元素



我有一个字典,我需要将元组与较大的字典进行比较,并根据匹配的数量获得最佳元素。

例如,下面是我的大字典(d(:

{('a', 'b', 'c', 'd', 'e', 'f'): [100, 101, 102],
('a', 'b', 'z', 'd'): [103, 104],
('a', 'b', 'x', 'd', 'e', 'f', 'g'): [105, 106, 107],
('a', 'b', 's', 'd', 'e'): [108],
('a', 'b', 'v', 'd', 'e', 'f', 'g', 'h'): [109, 110]}

下面是我的元组:

x2=('a','b','c'(

我需要把我的x2和较大的字典比较一下。此处

('a', 'b', 'c', 'd', 'e', 'f'): [100, 101, 102]

匹配是因为('a','b','c'(与较大字典中的其他元素相比有3个匹配项,我需要返回此项,即;

('a', 'b', 'c', 'd', 'e', 'f'): [100, 101, 102]
matched: 3, value: [100,101,102]

如何做到这一点?我正在使用下面的代码,但它不工作

shared_items = {k: d[k] for k in x2 if k in d and d[k] == x2[k]}

这需要多次遍历,查找与元组中所有3个元素匹配的第一个键,否则,查找元组中的前2个,等等。

small_key = ('a','b','c')
for small_key_size in range(len(small_key), 0, -1):
for big_key in d:
if big_key[:small_key_size] == small_key:
print(f"matched: {small_key_size}, value: {d[big_key]}")
break

(经过编辑,循环由内而外(

输出

matched: 3, value: [100, 101, 102]

最新更新