TypeError:不可共享的类型

时间:2017-04-19 04:51:08

标签: python list tkinter

我正在创建一个简单的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对象的列表,而不是字符串。

我怎样才能对我的话进行排序?

1 个答案:

答案 0 :(得分:3)

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

只有在为单词定义__str__方法(或在python2的情况下为__unicode__)时才有效。如果你没有,请使用下一个lambda:

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