2016-07-19 6 views
-1

У меня есть этот список:список Сортировка списков, которые каждый из которых содержит словарь

list_users= [[{'points': 9, 'values': 1, 'division': 1, 'user_id': 3}], [{'points': 3, 'values': 0, 'division': 1, 'user_id': 1}], [{'points': 2, 'values': 0, 'division': 1, 'user_id': 4}], [{'points': 9, 'values': 0, 'division': 1, 'user_id': 11}], [{'points': 3, 'values': 0, 'division': 1, 'user_id': 10}], [{'points': 100, 'values': 4, 'division': 1, 'user_id': 2}], [{'points': 77, 'values': 2, 'division': 1, 'user_id': 5}], [{'points': 88, 'values': 3, 'division': 1, 'user_id': 6}], [{'points': 66, 'values': 1, 'division': 1, 'user_id': 7}], [{'points': 2, 'values': 0, 'division': 1, 'user_id': 8}]] 

Мне нужно отсортировать список точек и значений.

Как я могу отсортировать его, если dict находится внутри списка внутри основного списка?

Я сгенерировал этот список по запросу и просто добавил list_users?

+1

Возможные дубликатом [Какие аргументы функции Python вроде есть? ] (http://stackoverflow.com/questions/1972672/what-arguments-does-python-sort-function-have) –

+1

Вы с hould _seriously_ рассмотрите возможность перезаписи кода, который создает этот список, чтобы он создавал простой список dicts. Наличие каждого из этих dicts внутри одноэлементного списка бессмысленно. –

ответ

2

Сортировка с использованием key function for sorted, который строит кортеж points и values для каждого dict в каждом списке.

def kf(x): 
    return (x[0]["points"], x[0]["values"]) 
s = sorted(list_users, key=kf) 
print(s) 

Выход:

[[{'division': 1, 'points': 2, 'user_id': 4, 'values': 0}], 
[{'division': 1, 'points': 2, 'user_id': 8, 'values': 0}], 
[{'division': 1, 'points': 3, 'user_id': 1, 'values': 0}], 
[{'division': 1, 'points': 3, 'user_id': 10, 'values': 0}], 
[{'division': 1, 'points': 9, 'user_id': 11, 'values': 0}], 
[{'division': 1, 'points': 9, 'user_id': 3, 'values': 1}], 
[{'division': 1, 'points': 66, 'user_id': 7, 'values': 1}], 
[{'division': 1, 'points': 77, 'user_id': 5, 'values': 2}], 
[{'division': 1, 'points': 88, 'user_id': 6, 'values': 3}], 
[{'division': 1, 'points': 100, 'user_id': 2, 'values': 4}]] 
3

Доступ словарь, содержащий points и values по индексации на внутреннем списке:

list_users_sorted = sorted(list_users, key=lambda x: (x[0]['points'], x[0]['values'])) 
#              ^   ^
+0

Можно ли добавить новое поле внутри каждой позиции в словаре? – 62009030

+0

В каждом dict добавить 'position': (номер позиции при сортировке) – 62009030

+0

Да это возможно. Перейдите через отсортированный список, используя 'enumerate' и для словаря в каждом подсписке, добавьте новый ключ как' 'position'' и значение в качестве значения индекса из' enumerate'. –

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