【问题标题】:TypeError: unorderable typesTypeError:不可排序的类型
【发布时间】:2017-09-15 03:32:33
【问题描述】:

我正在创建一个简单的 GUI 应用程序来管理未知单词,同时学习一门新语言。不过,我有一个列表,我试图按字母顺序从 A 到 Z 排序:

def sort_words(self):
    sorted_words = sorted(self.words)

    self.listBox.delete(0, END)
    for item in sorted_words:
        self.listBox.insert(END, item.wordorphrase)

问题是我得到了:

/usr/bin/python3.5 /home/cali/PycharmProjects/Vocabulary/Vocabulary.py
Traceback (most recent call last):
  File "/home/cali/PycharmProjects/Vocabulary/Vocabulary.py", line 361, in <module>
    main()
  File "/home/cali/PycharmProjects/Vocabulary/Vocabulary.py", line 355, in main
    gui = Vocabulary(root)
  File "/home/cali/PycharmProjects/Vocabulary/Vocabulary.py", line 28, in __init__
    self.load_words()
  File "/home/cali/PycharmProjects/Vocabulary/Vocabulary.py", line 153, in load_words
    self.sort_words()
  File "/home/cali/PycharmProjects/Vocabulary/Vocabulary.py", line 156, in sort_words
    sorted_words = sorted(self.words)
TypeError: unorderable types: Word() < Word()

Process finished with exit code 1

请注意,它是 Word 对象的列表,而不是字符串。

如何对我的单词进行排序?

【问题讨论】:

标签: python list tkinter


【解决方案1】:

试试sorted(self.words, key=str),它应该将你的单词作为字符串进行比较。

仅当您为 word 定义 __str__ 方法(或在 python2 的情况下为 __unicode__)时,它才有效。如果没有,请使用下一个 lambda:

sorted(self.words, key=lambda word: word.attr_where_you_store_actual_string)

【讨论】:

    猜你喜欢
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多