我需要对字典进行迭代,找到特定值的键。字典如下。
z1 = {9376: 172, 1: 168, 2: 179, 3: 2, 132: 9740, 145: 179, 137: 185, 135: 1, 142: 13528, 113: 158, 9781: 176, 9782: 168, 152: 13527, 9375: 9504, 127: 1}
我也有一个列表,我想在字典中检查并找出相应的键。
z =[13527,9741,9740,9505,9504,200,189,185,176,172,168,1]
我需要找到z中的哪些值存在于z1中,然后制作匹配值和键的字典。以下是我正在使用的代码
for i in range(len(z1)) :
try :
p = z[i]
a = list(z1.keys())[list(z1.values()).index(p)]
e1.append(a)
e2.append(p)
except (ValueError, IndexError,AttributeError) :
continue
e3 = list(zip(e1,e2))
print(e3)
我得到的结果是
[(152, 13527), (132, 9740), (9375, 9504), (137, 185), (9781, 176), (9376, 172), (1, 168), (135, 1)]
现在在字典z1中,你可以看到值168,1重复了两次,并且有唯一的键。当我运行for循环时,我只得到一个键值对。我应该怎么做才能得到所有键值相同的键,即我的最终答案应该是这样的
[(152, 13527), (132, 9740), (9375, 9504), (137, 185), (9781, 176), (9376, 172), (1, 168), (9782,168) (135, 1), (127,1)]
也许这就是你需要的。
e3 = [(k, i) for i in z for k in z1 if i==z1[k]]
给我:
[(152, 13527), (132, 9740), (9375, 9504), (137, 185), (9781, 176), (9376, 172), (1, 168), (9782, 168), (135, 1), (127, 1)]
在字典的值上进行遍历,首先就违背了使用字典的目的。
如果你需要存储 key, value
因为你在某个地方使用了它,那么我也建议建立一个反向的 value, key
.
如果值不是唯一的,就建立一个类似于 value, [list_of_keys]
. 这种方法会快得多。
在值上的遍历将是 O(n)
每次都是,但建立一个反向词典将是 O(1)
. 对于较大数值的 n
你的程序运行速度会大大加快。