使用python字典中的值查找键的结果没有按计划进行

时间:2017-01-28 12:30:08

标签: python numpy dictionary

我有这本词典:

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

我可以做些什么来使结果像我想要的那样?

我真的很感谢你的帮助。

谢谢。

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())

反向保存给定值的键的(因为可能很容易出现多个值的列表)。