如何按值重新排列双字典(Python3)

时间:2017-04-07 15:50:14

标签: python python-3.x dictionary

我是初学者编码。我正努力重新排列双字典。例如,

dict = {
'student_A': {
    'name': 'Hiro',
    'age': 22,
},
'student_B': {
    'name': 'Alex',
    'age': 24,
    },
'student_C': {
    'name': 'Jon',
    'age': 23,
    }
}

在此代码中,我如何按照这样的年龄顺序排列? :

[
 {
    'name': 'Alex'
 },
 {   
    'name': 'Jon'
 },
 {
    'name': 'Hiro'
 }
]

如果你能解释一下细节,我们将不胜感激!

2 个答案:

答案 0 :(得分:1)

你可以这样做:

value_list = list(dict.values())
value_list.sort(key=lambda value: value['age'])

这将使value_list列出字典中的值,按年龄排序。您可以通过调用dict_values获取dict.values()对象来执行此操作。然后可以将此对象转换为列表,然后可以通过调用list.sort()方法对其进行排序。 key参数是一个函数,它将返回每个字典的年龄。

如果您没有看到lambda name: statement语法,则会有一个引用here

答案 1 :(得分:1)

它看起来(从你给出的输出)就像你真的想要这个名字的年龄相反?而且您还需要列出的对象中的名称 - 这样您就可以过滤掉原始对象的年龄部分。

在这种情况下,您可能希望使用列表推导,这是一种非常有用的pythonic方法,可以在列表上进行过滤和映射类型操作。要了解有关列表理解的更多信息,请查看官方documentation

如何执行此操作的示例:

>>> my_ordered_list = [ {'name': student['name']} for student in sorted(dict.values(), key=lambda x:-x['age']) ]

>>> my_ordered_list
[{'name': 'Alex'}, {'name': 'Jon'}, {'name': 'Hiro'}]