问题:在Python3中按索引访问dict_keys元素
我正在尝试通过其索引访问dict_key的元素:
test = {'foo': 'bar', 'hello': 'world'}
keys = test.keys()  # dict_keys object
keys.index(0)
AttributeError: 'dict_keys' object has no attribute 'index'我想得到foo。
与:
keys[0]
TypeError: 'dict_keys' object does not support indexing我怎样才能做到这一点?
回答 0
list()而是调用字典:
keys = list(test)在Python 3中,该dict.keys()方法返回一个字典视图对象,它作为一个集合。直接迭代字典也会产生键,因此将字典转换为列表会得到所有键的列表:
>>> test = {'foo': 'bar', 'hello': 'world'}
>>> list(test)
['foo', 'hello']
>>> list(test)[0]
'foo'回答 1
不是完整的答案,但可能是有用的提示。如果它确实是您想要的第一项*,那么
next(iter(q))比快得多
list(q)[0]对于大词典,因为不必将整个内容存储在内存中。
对于10.000.000物品,我发现它快了将近40.000倍。
*如果dict只是Python 3.6之前的伪随机项目,则第一项(此后它在标准实现中已订购,尽管不建议依赖它)。
回答 2
我想要第一个字典项的“键”和“值”对。我用下面的代码。
 key, val = next(iter(my_dict.items()))回答 3
test = {'foo': 'bar', 'hello': 'world'}
ls = []
for key in test.keys():
    ls.append(key)
print(ls[0])将键附加到静态定义的列表然后对其进行索引的常规方式
回答 4
在许多情况下,这可能是XY问题。为什么要按位置索引字典键?您真的需要吗?直到最近,字典甚至还没有在Python中排序,因此访问第一个元素是任意的。
我刚刚将一些Python 2代码翻译为Python 3:
keys = d.keys()
for (i, res) in enumerate(some_list):
    k = keys[i]
    # ...这不是很漂亮,但也不是很糟糕。起初,我正要用可怕的东西代替它
    k = next(itertools.islice(iter(keys), i, None))在我意识到这一切写成更好之前
for (k, res) in zip(d.keys(), some_list):效果很好。
我相信在许多其他情况下,可以避免按位置索引字典关键字。尽管字典在Python 3.7中是有序的,但是依靠它并不是很漂亮。上面的代码仅起作用,因为的内容some_list是最近从的内容中产生的d。
如果您确实需要disk_keys按索引访问元素,请仔细看一下代码。也许您不需要。
回答 5
试试这个
keys = [next(iter(x.keys())) for x in test]
print(list(keys))结果看起来像这样。[‘foo’,’hello’]
您可以在此处找到更多可能的解决方案。
	声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

