如何按值对字典的字典进行排序 python

How to sort a dictionary of dictionaries by their values python

我有一个用户字典,看起来像这样:

{
  user1: {
    userLevel: 1,
    userScore: 2
  },
  user2: {
    userLevel: 5,
    userScore: 16
  },
  user3: {
    userLevel: 3,
    userScore: 14
  }
}

并且我需要按值对它进行排序,以便具有最高级别的用户排在第一位,如果某些用户的级别相同,则得分较高的用户排在第一位。如果有2个用户的等级和分数相同,任何一个都可以先走,没关系。有干净的方法吗?

已经有多个关于如何按值排序字典的答案。此处唯一发生变化的是您的项目也是字典。

函数 sorted 允许您根据 特定键 .

对字典进行排序

您要做的是在 特定键 上对字典进行排序,在本例中为 userScore

因此您需要找到一种方法来指定这是您的排序所基于的键

您还需要一种迭代字典的方法。这是通过 .items() 函数完成的。

如果您的大词典名为 a,那么 a.items() 将 return 一个 元组列表 ,其中每个元组都有一个 : user_x 和一个 value : 字典。

a.items() = [('user1', {'userLevel': 1, 'userScore': 2}), ('user2', {'userLevel': 5, 'userScore': 16}), ('user3', {'userLevel': 3, 'userScore': 14})]

现在您可以迭代这些项目,您需要指定在迭代时为您解析的每个项目,您需要评估其关键 userScore 是大于还是低于其他项目。

因此对于每个项目 x(在我们的例子中是一个元组),它们的关键 userScore 是用 x[1]['userScore']

检索的

排序代码行应如下所示:

a = sorted(a.items(), key = lambda tuple : tuple[1]['userScore']