可能重复:
Inverse dictionary lookup - Python
reverse mapping of dictionary with Python
如何在字典中获取索引键?
例如:
i = {'a': 0, 'b': 1, 'c': 2}
所以,如果我想得到i [0]的关键字,它将返回'a'
答案 0 :(得分:18)
Python词典有一个键和一个值,你要求的是键指向一个给定的值。
您只能循环执行此操作:
[k for (k, v) in i.iteritems() if v == 0]
请注意,dict中每个值可以有多个键; {'a': 0, 'b': 0}
完全合法。
如果您想要订购,则需要使用列表或OrderedDict instance代替:
items = ['a', 'b', 'c']
items.index('a') # gives 0
items[0] # gives 'a'
答案 1 :(得分:18)
你可以做这样的事情:
i={'foo':'bar', 'baz':'huh?'}
keys=i.keys() #in python 3, you'll need `list(i.keys())`
values=i.values()
print keys[values.index("bar")] #'foo'
但是,每次更改字典时,都需要更新密钥值,因为字典不是在3.7之前的Python版本中排序。在这些版本中,只要您插入新的键/值对,您认为已经离开的顺序就会消失,并被新的(或多或少随机)订单所取代。因此,在词典中索引索引是没有意义的。
从Python 3.6开始,对于Python的CPython实现,字典记住了插入项目的顺序。截至Python 3.7+字典按插入顺序排序。
另请注意,您所问的可能不是您真正想要的。无法保证字典中的逆映射是唯一的。换句话说,您可以使用以下字典:
d={'i':1, 'j':1}
在这种情况下,无法知道您是想要i
还是j
,实际上这里没有答案可以告诉您哪个('i'
或{{1}将被选中(再次,因为字典是无序的)。在那种情况下你想要发生什么?你可以得到一个可接受的密钥列表...但我猜你对字典的基本理解是不对的。
答案 2 :(得分:5)
根据定义,词典是无序的,因此无法编入索引。对于这种功能,请使用有序字典。 Python Ordered Dictionary
答案 3 :(得分:0)
通过def。字典是键值对的无序集合。所以你不能拥有键值对的索引。您可以将它们保存在两个有序列表中,其中键和值的索引值相同。然后,对于键列表中特定索引处的每个键,您可以从值列表中检索相关值。
或者更好地使用有序词典。
d = OrderedDict([('first', 1),
...('second',2), ......('第三',3)])
选中此ordered list