在python中通过索引访问字典值

Dmi*_*kov 23 python indexing dictionary

我想从Python字典中获取密钥索引的值.有没有办法得到这样的东西?

dic = {}
value_at_index = dic.ElementAt(index)
Run Code Online (Sandbox Code Playgroud)

哪里index是整数

NPE*_*NPE 26

标准的Python字典本质上是无序的,所以你要求做的事情并没有多大意义.

如果你真的,真的知道你在做什么,请使用

value_at_index = dic.values()[index]
Run Code Online (Sandbox Code Playgroud)

请记住,添加或删除元素可能会更改每个其他元素的索引.

  • `dic.values()[index]`我获得'dict_values'对象不支持索引.....?(python 3.6) (8认同)
  • 虽然如果您能够更改原始数据结构,则可以使用"OrderedDict". (5认同)

Mik*_*and 7

如果您真的只想要可用键范围中的随机值,请使用random.choice字典的值(转换为列表形式,如果是Python 3).

>>> from random import choice
>>> d = {1: 'a', 2: 'b', 3: 'c'}
>>>> choice(list(d.values()))
Run Code Online (Sandbox Code Playgroud)


use*_*679 7

虽然你可以做

value = d.values()[index]
Run Code Online (Sandbox Code Playgroud)

应该会更快

value = next( v for i, v in enumerate(d.itervalues()) if i == index )
Run Code Online (Sandbox Code Playgroud)

编辑:我只是使用 len 100,000,000 的字典在最后检查索引来计时,第一个/values() 版本花了 169 秒,而第二个/next() 版本花了 32 秒。

另请注意,这假设您的索引不为负


moh*_*aik 6

让我们以字典为例:

numbers = {'first':0, 'second':1, 'third':3}
Run Code Online (Sandbox Code Playgroud)

当我做的时候

numbers.values()[index]
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:“ dict_values”对象不支持索引

当我做的时候

numbers.itervalues()
Run Code Online (Sandbox Code Playgroud)

迭代并提取值,这也会产生错误:“ dict”对象没有属性“ iteritems”

因此,我想出了一种通过将索引元素转换为元组来通过索引访问字典元素的新方法。

tuple(numbers.items())[key_index][value_index]
Run Code Online (Sandbox Code Playgroud)

例如:

tuple(numbers.items())[0][0] gives 'first'
Run Code Online (Sandbox Code Playgroud)

如果要编辑值或对值进行排序,则tuple对象不允许分配项目。在这种情况下,您可以使用

list(list(numbers.items())[index])
Run Code Online (Sandbox Code Playgroud)