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

Nat*_*ume 18 python dictionary

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

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

例如:

i = {'a': 0, 'b': 1, 'c': 2}
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 18

Python词典有一个键和一个值,你要求的是键指向给定值.

你只能循环执行此操作:

[k for (k, v) in i.iteritems() if v == 0]
Run Code Online (Sandbox Code Playgroud)

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

如果您想要订购,您需要使用列表或OrderedDict实例:

items = ['a', 'b', 'c']
items.index('a') # gives 0
items[0]         # gives 'a'
Run Code Online (Sandbox Code Playgroud)

  • 不要以为这就是他的要求。他想使用列表中的编号位置“索引” (3认同)

mgi*_*son 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'
Run Code Online (Sandbox Code Playgroud)

但是,每次更改字典时,都需要更新键,值,因为字典不是订购的.无论何时插入新的键/值对,您认为自己的订单都会消失,并被新的(或多或少随机)订单所取代.因此,在字典中索引索引没有意义.

另请注意,您所问的可能不是您真正想要的.无法保证字典中的逆映射是唯一的.换句话说,您可以拥有以下字典:

d={'i':1, 'j':1}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,不可能知道你是否想要ij实际上没有答案可以告诉你哪个('i''j')将被选中(再次,因为字典是无序的).在那种情况下你想要发生什么?你可以得到一个可接受的密钥列表...但我猜你对字典的基本理解是不对的.

  • @PaulSeeb - 为什么你认为我添加了所有“你要求的可能不是你想要的”和“我猜你对字典的基本理解不太正确”? (2认同)

und*_*bar 5

根据定义,字典是无序的,因此无法编入索引.对于这种功能,请使用有序字典.Python有序字典

  • Python 3.7 更新:现在订购字典:https://mail.python.org/pipermail/python-dev/2017-December/151283.html (2认同)