2011-07-30 76 views
-1

看起来这是一个常见问题,但我似乎无法找到解决方案。Python3从值中获取键?

我有一个Python3脚本包含两个字典sqldicthitsdict。此代码输出字典值,如果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方式吗?

+1

你在说什么? – hop

+0

对不起,我的问题产生了混淆;这很难解释。基本上,我有两本字典,我想找到哪些价值物品出现在这两本字典中,然后为这些值获取相应的密钥。我使用密钥作为字典值的技巧使每个人都需要类似的东西。谢谢您的帮助! – drbunsen

回答

1

您正在通过循环查看字典中的项目来查找值。这是错误的方式。字典的全部目的是使用键来查找事物。

总之,你的数据结构是完全搞砸了。由于我们不知道它的外观,因此我们不能告诉你它应该如何显示,但另一方面,其中一个值中包含“sql”一词。

我可以建议你使用SQL查询来做任何你想做的事吗?

1

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

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

我很抱歉,但我想不出任何其他的答案,但“你是干什么其荣!”

0

你可以使用我所说的“反义词”。 我的想法是,你创建两个字典:

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

现在你可以很快与每个键和逆相关的值:键与每个值相关联。

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