我知道您可以强制dict_items转换list为允许项目索引.但我不知道为什么不允许直接进行此操作.是因为dict_items物体是发电机吗?如果是这样的话,当我看到的时候
>>> {"foo": "bar", "baz": "qux"}.items()
dict_items([('foo', 'bar'), ('baz', 'qux')])
Run Code Online (Sandbox Code Playgroud)
是repr什么时候调用Python来评估我的生成器?
wim*_*wim 10
dict_items 不支持索引,因为这些对象旨在设置为类似,并且集合不支持索引.
他们在其他方面像套装一样嘎嘎作响:
>>> d1 = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
>>> d2 = {'k2': 'v2', 'k3': 'not v3'}
>>> d1.items() & d2.items()
{('k2', 'v2')}
>>> d1.items() | d2.items()
{('k1', 'v1'), ('k2', 'v2'), ('k3', 'not v3'), ('k3', 'v3')}
Run Code Online (Sandbox Code Playgroud)
如果任何值不可清除,则您将无法使用set操作处理dict项视图.
为dict_items视图提供索引支持是不明智的,因为在Python 3.7+之前dict没有排序,因此访问"第0个"项目将无法很好地定义.即使在Python 3.7,那里是一个明智的顺序使用索引(即插入顺序),它是不平凡一起实现这个O(1)复杂性,所以它不支持."不成文规则"是索引应该是恒定时间操作(就像列表,元组,字典,str一样 - 参见这里).