2015-04-09 2 views
1

Я пытаюсь отсортировать список объектов, но я получаю следующие ошибки:Сортировка списка объектов, TypeError: unorderable типы

subredditlist.sort(key=lambda x: x.count) 
    TypeError: unorderable types: builtin_function_or_method() < builtin_function_or_method() 

Код в вопросе:

main.py:

for k, v in smapped.items(): 
    rlist.append(objclist(k, v)) 
rlist.sort(key=lambda x: x.count) 

где subsmapped является словарь

objclist.py:

class objclist: 
    def __init__(self, name, count): 
     self.name = name 
     self.count = count 
+1

Как вы построить 'subredditlist'? – warvariuc

+0

добавлен. данные поступают из словаря, который затем используется для создания объектов, которые входят в список. – user2369869

ответ

2

Мне кажется, что x.count - это функция, а не значение.

Если это так, измените функцию сортировки лямбда на lambda x: x.count(). Если это не кейс, добавьте определение subredditlist, чтобы уточнить ваш вопрос.

+0

считается, что значение считается значением в объекте. – user2369869

+0

_supposed to__? Ну, так? :) – Finwood

1

Для сортировки список должен иметь объекты, которые реализуют метод __lt__ и взаимно сопоставимы (т.е. [1,2,3]> "4" ничего не значит) - точнее, ключевая функция должна возвращать которые взаимно сопоставимы. Ваша ключевая функция возвращает метод, который не сопоставим. Вы, вероятно, имел в виду, чтобы вызвать метод key=lambda x: x.count()

3

Учитывая

class objclist: 
    def __init__(self, name, count): 
     self.name = name 
     self.count = count 

выглядит как создавать экземпляры этого класса прохождения функции в качестве аргумента count к costructor.

for k, v in smapped.items(): 
    rlist.append(objclist(k, v)) 
rlist.sort(key=lambda x: x.count) 

smapped Похоже, содержит функции/методы его значений.

+0

smapped - словарь. – user2369869

+0

Да, это словарь, который содержит функцию в своих значениях. Покажите, как вы создаете 'smapped' – warvariuc

1

Ошибка Обратите внимание, что код key является "builtin _function_or_method()". Это означает, что x, вероятно, str, list, tuple (есть другие встроенные функции с методами подсчета?)

Так v вы передаете к objclist является фактически count методом встроено объекта.

Возможно, вы забыли () где-то при построении smapped.items()

Смежные вопросы