排序列表,每个列表包含一个字典

时间:2016-07-19 11:45:13

标签: python

我有这个清单:

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

2 个答案:

答案 0 :(得分:3)

在内部列表中通过索引访问包含pointsvalues的词典:

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

答案 1 :(得分:2)

使用datetime排序,为每个列表中的每个字典构建pointsvalues元组。

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}]]