Python3从值获取键?

时间:2011-07-30 17:21:32

标签: python dictionary python-3.x

这似乎是一个常见的问题,但我似乎无法找到解决方案。

我有一个包含两个词典sqldicthitsdict的Python3脚本。此代码输出字典值,如果sqldict[value][0] == hitsdict[thing][1]

for value in sqldict:
        for thing in hitsdict:
            if sqldict[value][0] == hitsdict[thing][1]:
                print(hitsdict[thing][1],sqldict[value][5])

我还想获得与sqldict[value][0] == hitsdict[thing][1]比较匹配的值相关联的键,但我似乎无法弄清楚如何获取相关的键?我试图做这样的事情:

for key, value in sqldict.items():
        for thing in hitsdict:
            if sqldict[value][0] == hitsdict[thing][1]:
                            print(key,hitsdict[thing][1],sqldict[value][5])

任何人都可以解释我的问题是什么以及如何通过sqldict[value][0] == hitsdict[thing][1]比较传递我的值来获取密钥?谢谢!

编辑: 我有一个想法是将密钥添加为附加值。还有另一种更多的pythonic方式吗?

3 个答案:

答案 0 :(得分:1)

字典查找是“按键”而不是“按值”。

>>> d = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
>>> for key in d:
...     print key
... 
key3
key2
key1

对不起,但我想不出任何其他答案,但是“你这样做了!”

答案 1 :(得分:1)

您通过循环遍历字典中的项目来查找值。这是错误的方式。字典的全部目的是使用键来查找。

简而言之,您的数据结构完全搞砸了。由于我们不知道它的外观,我们无法告诉你它应该如何看,但另一方面,你在其中一个值中有“sql”这个词。

我建议您使用SQL查询来做任何事情吗?

答案 2 :(得分:0)

你可以使用我称之为“逆转换”的东西。 我的想法是,你创建了两个词典:

dict1 = {key1: value1, key2: value2, ...}
dict1_inv = {value1: key1, value2: key2, ...}

现在,您可以快速获得与每个键相关联的值以及与每个值关联的inverse:键。

我不知道这是不是“Pythonic”,但据我所知,应该解决你的问题。