【问题标题】:dict_items object has no attribute 'sort'dict_items 对象没有属性“排序”
【发布时间】: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

【问题讨论】:

    标签: python reportlab ptvs


    【解决方案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)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-04
        • 2016-04-11
        • 2018-07-24
        • 1970-01-01
        • 2016-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多