24

可能重复:
逆字典查找 -使用 Python
的字典的 Python 反向映射

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

例如像:

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

所以如果我想获取 i[0] 的密钥,它将返回 'a'

4

3 回答 3

29

可以这样做:

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''j')(同样,因为字典是无序的)。你想在那种情况下发生什么?你可以得到一个可接受的键列表......但我猜你对字典的基本理解不太正确。

于 2012-07-24T14:23:12.267 回答
20

Python 字典有一个键和一个值,你要的是什么键指向一个给定的值。

您只能在循环中执行此操作:

[k for (k, v) in i.iteritems() if v == 0]

请注意,字典中的每个值可以有多个键;{'a': 0, 'b': 0}是完全合法的。

如果要订购,则需要使用列表或OrderedDict 实例

items = ['a', 'b', 'c']
items.index('a') # gives 0
items[0]         # gives 'a'
于 2012-07-24T14:23:02.190 回答
6

根据定义,字典是无序的,因此不能被索引。对于这种功能,请使用有序字典。Python 有序字典

于 2012-07-24T14:22:56.730 回答