我有这本词典:
c = {0: [0, 2, 3], 1: [1, 6, 9]}
我有这个清单:
f = [1, 0, 6]
我想知道f中的每个成员,字典c中的关键是什么?
以下是我用来实现此目的的代码:
for m, n in c.items():
for k in n:
for l in f:
if k == l:
print(m)
我得到了这个结果:
0
1
1
但我认为结果应该是:
1
0
1
我可以做些什么来使结果像我想要的那样?
我真的很感谢你的帮助。
谢谢。
答案 0 :(得分:3)
你正在循环C
的项目;字典上的迭代发生在特定于实现的内部订单中(参见Why is the order in dictionaries and sets arbitrary?)。由于您还没有打印k
变量,因此您不知道与什么配对。
如果你想以相同的顺序打印东西,你必须在外循环中循环n
:
for k in f:
for m, n in C.items():
if k in n:
print m
break
我调整了内部循环以使用in
的列表成员资格测试,并使用break
停止进一步搜索。
使用这样的词典相当适得其反。如果n
很大,请考虑改为创建反向索引:
inverse = {}
for m, n in C.items():
for i in n:
inverse.setdefault(i, set()).add(m)
然后使用它来进行快速查找:
for k in f:
print inverse.get(k, set())
反向保存给定值的键的集(因为可能很容易出现多个值的列表)。