runnerList = [{1:{"name":"John","height":173,"age":16}},
{2:{"name":"Fred","height":185,"age":18}},
{3:{"name":"Luke","height":181,"age":17}}]
我一直试图根据跑步者的年龄按升序排序这个词典列表,但没有成功:(我试过了:
import operator
runnerList.sort(key=lambda x: x['age'], reverse=True)
但似乎没有任何事情发生。我该怎么做?
答案 0 :(得分:0)
试试这个:
runnerList.sort(key=lambda x: x.values()[0]['age'])
print runnerList
您收到错误的原因是您的相关词典(包含age
键的词典)也包含在另一个词典中。解决方案同样简单地获取外部values()
的{{1}}并获取第一个元素(dict
),它为您提供了内部唯一的字典。
此外,我删除了您示例中使用的[0]
。它会以降序向您提供结果,并且您明确要求它们以升序。
如果您使用的是Python版本> = 3:,则必须转换使用reverse=True
创建的生成器对象。
values()
答案 1 :(得分:0)
runnerList
是词典的词典列表。
如果您确定每个列表条目只有一对键值,那么您可以按以下方式排序:
runnerList.sort(key=lambda x: list(x.values())[0]['age'], reverse=True)
如果每个列表条目都有多个键值对,那么您需要更好地指定排序逻辑。你会在这样的名单上做什么?:
runnerList = [{1:{"name":"John","height":173,"age":16}},
{ 2:{"name":"Fred","height":185,"age":18},
4:{"name":"Fred","height":185,"age":13}
},
{3:{"name":"Luke","height":181,"age":17}}]
答案 2 :(得分:-1)
你基本上有listList形式的runnerList,因为它包含在[]
中。首先将其更改为字典,如
runnerList = {1:{"name":"John","height":173,"age":16},
2:{"name":"Fred","height":185,"age":18},
3:{"name":"Luke","height":181,"age":17} }
然后您可以import operator
并可以使用以下功能对项目进行排序并打印
sorted_runnerList = sorted(runnerList.items(),key=lambda x: x[1]['age'],)
虽然这会直接在字典中对字典中的年龄进行排序
所以基本上你的功能变成了
import operator
runnerList = {1:{"name":"John","height":173,"age":16},
2:{"name":"Fred","height":185,"age":18},
3:{"name":"Luke","height":181,"age":17} }
sorted_runnerList = sorted(runnerList.items(),key=lambda x: x[1]['age'],)
print sorted_runnerList
但请记住,因为我们使用的是.items(),它会返回不可变的元组
输出
[(1, {'age': 16, 'name': 'John', 'height': 173}), (3, {'age': 17, 'name': 'Luke', 'height': 181}), (2, {'age': 18, 'name
': 'Fred', 'height': 185})]