python中通过索引访问字典值

python中通过索引访问字典值,python,dictionary,indexing,Python,Dictionary,Indexing,我想从Python字典中按键索引获取值。有没有办法得到像这样的东西 dic = {} value_at_index = dic.ElementAt(index) 其中索引是一个整数标准Python字典本质上是无序的,因此您要求执行的操作实际上没有意义 如果你真的,真的知道你在做什么,使用 value_at_index = dic.values()[index] 请记住,添加或删除一个元素可能会更改其他每个元素的索引。如果您真的只想从可用的键范围中获得一个随机值,请在字典的值上使用random

我想从Python字典中按键索引获取值。有没有办法得到像这样的东西

dic = {}
value_at_index = dic.ElementAt(index)

其中
索引
是一个整数

标准Python字典本质上是无序的,因此您要求执行的操作实际上没有意义

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

value_at_index = dic.values()[index]

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

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

当你能做的时候

value = d.values()[index]
这样做应该更快

value = next( v for i, v in enumerate(d.itervalues()) if i == index )
编辑:我只是使用len100000000的dict在最后检查索引来计时,第一个/values()版本用了169秒,而第二个/next()版本用了32秒


另外,请注意,这假设您的索引不是负的。让我们以字典为例:

numbers = {'first':0, 'second':1, 'third':3}
当我这么做的时候

numbers.values()[index]
numbers.itervalues()
我得到一个错误:'dict_values'对象不支持索引

当我这么做的时候

numbers.values()[index]
numbers.itervalues()
要迭代和提取值,它也会给出一个错误:“dict”对象没有属性“iteritems”

因此,我提出了通过索引访问字典元素的新方法,只需将它们转换为元组

tuple(numbers.items())[key_index][value_index]
例如:

tuple(numbers.items())[0][0] gives 'first'
如果要编辑值或对值进行排序,tuple对象不允许项分配。在这种情况下,您可以使用

list(list(numbers.items())[index])

尽管
OrderedDict
在您能够更改原始数据结构的情况下可用。>>添加或删除元素可能会更改其他所有元素的索引。是的,我知道,这是许多语言中许多迭代器的常识。是的,我想要索引的确切目的是获取可用键范围内的随机值,只是为了实现我的算法。我不确定我会将给定索引处的值称为“随机”。
dic.values()[index]
I获取“dict_值”对象不支持索引?(Python3.6)对于本帖的后续访问者:按索引获取值:
dic.values()[index]
按索引获取键:
dic.keys()[index]
这对Python3非常有效,谢谢!当索引为字符串时不起作用<代码>类型错误:列表索引必须是整数或片,而不是str