python中对字典进行排序_在python中对字典列表进行排序

你的想法已经非常好了,在排序时使用自定义键功能,并在play键上使用sum,map和itemgetter:

key=sum(map(itemgetter(play)))

你确实遇到了一个问题:key参数需要一个函数来获取你正在排序的列表项.但是sum和map都没有返回函数,因此你不能将它用作关键函数.相反,您可以创建一个lambda函数,为每个项目执行此组合.

其他问题是play应该是一个字符串’play’,而该map应该将子列表作为参数.所以你的关键功能看起来像这样:

key=lambda x: sum(map(itemgetter('play'), x))

这是顺便说一句.在功能上等同于以下生成器理解,它可能更具可读性:

key=lambda x: sum(y['play'] for y in x)

使用sort和sorted应该可以工作但你应该考虑直接使用list.sort对列表进行排序:

>>> myObject = [[{ "play": 5.00, "id": 1, "uid": "abc" },

{ "play": 1.00, "id": 2, "uid": "def" }],

[{ "play": 6.00, "id": 3, "uid": "ghi" },

{ "play": 7.00, "id": 4, "uid": "jkl" }],

[{ "play": 3.00, "id": 5, "uid": "mno" },

{ "play": 1.00, "id": 6, "uid": "pqr" }]]

>>> myObject.sort(key=lambda x: sum(y['play'] for y in x), reverse=True)

>>> for x in myObject:

print(x)

[{'play': 6.0, 'uid': 'ghi', 'id': 3}, {'play': 7.0, 'uid': 'jkl', 'id': 4}]

[{'play': 5.0, 'uid': 'abc', 'id': 1}, {'play': 1.0, 'uid': 'def', 'id': 2}]

[{'play': 3.0, 'uid': 'mno', 'id': 5}, {'play': 1.0, 'uid': 'pqr', 'id': 6}]

(顺便说一下,myObject对于一系列事物来说是一个坏名字.)

就问题的效率或复杂性而言,您实际上无法避免最终遍历每个子列表.如果不查看这些值,就无法确定这些值的总和,所以很明显你无法避免这种情况.

但是,您应确保每次总和只计算一次,以避免不止一次查看子列表中的项目.幸运的是,使用list.sort的默认排序确实可以保证:

The key corresponding to each item in the list is calculated once and then used for the entire sorting process.

因此,您将为此排序问题提供非常有效的解决方案.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值