Python3 如何从值获取键?
看起来这个问题很常见,但我找不到解决办法。
我有一个Python3的脚本,里面有两个字典,分别叫做sqldict
和hitsdict
。这段代码会输出字典中的值,只要满足条件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])
有没有人能解释一下我的问题是什么,以及我该如何从满足条件的值中获取键呢?谢谢!
补充说明:我想到的一个办法是把键作为额外的值添加进去。还有没有其他更符合Python风格的方法呢?
3 个回答
0
你可以使用我称之为“反向字典”的东西。我的想法是,你可以创建两个字典:
dict1 = {key1: value1, key2: value2, ...}
dict1_inv = {value1: key1, value2: key2, ...}
这样你就可以快速获取每个键对应的值,以及每个值对应的键。
我不知道这样做是否算是“Pythonic”(符合Python风格),但根据我的理解,这应该能解决你的问题。
1
字典查找是通过“键”来找,而不是通过“值”。
>>> d = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
>>> for key in d:
... print key
...
key3
key2
key1
抱歉,我想不出其他的回答,只能说“你做错了!”
1
你现在是通过循环字典里的项目来查找值,这样做是不对的。字典的主要目的就是用键来查找东西。
简单来说,你的数据结构完全乱了。我们不知道它具体是什么样子的,所以没法告诉你应该是什么样子。不过,有一点可以注意的是,你的某个值里有“sql”这个词。
我建议你使用SQL查询来完成你想做的事情。