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

时间:2013-02-27 14:41:58

标签: python dictionary indexing

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

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

其中index是一个整数

4 个答案:

答案 0 :(得分:24)

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

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

value_at_index = dic.values()[index]

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

答案 1 :(得分:6)

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

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

答案 2 :(得分:3)

虽然你可以做到

value = d.values()[index]

应该更快做

value = next( v for i, v in enumerate(d.itervalues()) if i == index )

编辑:我只是在最后使用len 100,000,000的dict来检查索引,而1st / values()版本需要169秒,而2nd / next()版本需要32秒。

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

答案 3 :(得分:3)

让我们以字典为例:

numbers = {'first':0, 'second':1, 'third':3}

我做了

numbers.values()[index]

我遇到一个错误:'dict_values'对象不支持索引

我做了

numbers.itervalues()

要迭代并提取值,它还会产生错误:'dict'对象没有属性'iteritems'

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

tuple(numbers.items())[key_index][value_index]

例如:

tuple(numbers.items())[0][0] gives 'first'

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

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