dict_items 对象没有属性“排序”
Posted
技术标签:
【中文标题】dict_items 对象没有属性“排序”【英文标题】:dict_items object has no attribute 'sort' 【发布时间】:2015-03-18 07:34:58 【问题描述】:首先,我是 Python 新手。我正在使用 PTVS http://pytools.codeplex.com/。接下来我安装了reportlab。然后我在https://github.com/nakagami/reportlab/blob/master/demos/colors/colortest.py#L68 上运行了一个示例演示,但是在线,
all_colors = reportlab.lib.colors.getAllNamedColors().items()
all_colors.sort() # alpha order by name
我遇到了错误,dict_items object has no attribute sort
【问题讨论】:
【参考方案1】:尚未测试,但有一个理论:您使用的是 python3!
来自https://docs.python.org/3/whatsnew/3.0.html
dict 方法 dict.keys()、dict.items() 和 dict.values() 返回“视图”而不是列表。例如,这不再有效: k = d.keys(); k.sort()。改用 k = sorted(d) (这在 Python 2.5 中也有效,并且同样有效)。
据我了解,“视图”是一个迭代器,而迭代器没有排序功能。改成
sorted(all_colors)
根据文档
【讨论】:
“据我所知,“视图”是一个迭代器”它不是,但视图是可迭代的。视图基本上是一个代理对象,因此您可以获得一个表示 dict 中具有恒定空间/时间开销的项目的对象。这经常用于迭代 dict 中的键值对,是的,但它也支持其他方便的方法,例如类似集合的操作。在这里阅读更多:docs.python.org/3/library/stdtypes.html#dictionary-view-objects【参考方案2】:所以基于 Johan 的回答的整体解决方案是:
all_colors = sorted(reportlab.lib.colors.getAllNamedColors().items())
【讨论】:
【参考方案3】:我相信sort()
方法不再支持Python 3.x。
需要将对应的变量传递给sorted(all_colors)
。
【讨论】:
以上是关于dict_items 对象没有属性“排序”的主要内容,如果未能解决你的问题,请参考以下文章