Python:获取字典索引的关键字

时间:2012-07-24 14:20:53

标签: python dictionary

  

可能重复:
  Inverse dictionary lookup - Python
  reverse mapping of dictionary with Python

如何在字典中获取索引键?

例如:

i = {'a': 0, 'b': 1, 'c': 2}

所以,如果我想得到i [0]的关键字,它将返回'a'

4 个答案:

答案 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