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 对象没有属性“排序”的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 3 中使用 lambda 排序 [重复]

TypeError:无法腌制 dict_items 对象

获取属性错误:“地图”对象没有属性“排序”

AttributeError:“列表”对象没有属性“排序值”

按嵌套属性对对象的对象进行排序

Python:根据属性对对象列表进行排序