如何按值对字典的字典进行排序 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']
我有一个用户字典,看起来像这样:
{
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']