我想通过 Python 字典中的键索引获取值。有没有办法得到这样的东西?
dic = {}
value_at_index = dic.ElementAt(index)
其中index
是一个整数
我想通过 Python 字典中的键索引获取值。有没有办法得到这样的东西?
dic = {}
value_at_index = dic.ElementAt(index)
其中index
是一个整数
在 3.7 之前的 Python 版本中,字典本质上是无序的,所以你要求做的事情并没有真正的意义。
如果您真的,真的知道自己在做什么,请使用
value_at_index = list(dic.values())[index]
请记住,在 Python 3.7 之前,添加或删除一个元素可能会更改每个其他元素的索引。
让我们以字典为例:
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])
如果您真的只想从可用键范围中获取随机值,请random.choice
在字典的值上使用(如果 Python 3,则转换为列表形式)。
>>> from random import choice
>>> d = {1: 'a', 2: 'b', 3: 'c'}
>>>> choice(list(d.values()))
虽然你可以做
value = d.values()[index]
应该更快
value = next( v for i, v in enumerate(d.itervalues()) if i == index )
编辑:我只是使用 len 100,000,000 的字典在最后检查索引对其进行计时,第一个/values() 版本需要 169 秒,而第二个/next() 版本需要 32 秒。
另外,请注意,这假设您的索引不是负数