为了账号安全,请及时绑定邮箱和手机立即绑定

Python 列表中字典的一个排序问题,如何按某个key的大小进行排序?

Python 列表中字典的一个排序问题,如何按某个key的大小进行排序?

忽然笑 2019-02-18 03:01:36
# 有两个列表如下 a = [{'info1' : 'someinfo', 'date' : 1}, {'info1' : 'someinfo', 'date' : 4}, {'info1' : 'someinfo', 'date' : 7}, {'info1' : 'someinfo', 'date' : 13}] b = [{'info1' : 'someinfo', 'date' : 3}, {'info1' : 'someinfo', 'date' : 8}] # 需要按照列表中的字典的date的大小,由小到大进行排序 # 得到c c = [{'info1' : 'someinfo', 'date' : 1}, {'info1' : 'someinfo', 'date' : 3}, {'info1' : 'someinfo', 'date' : 4}, {'info1' : 'someinfo', 'date' : 7}, {'info1' : 'someinfo', 'date' : 8}, {'info1' : 'someinfo', 'date' : 13}] a 的顺序为 :1、4、7、13b 的顺序为 :3、8 排序后:c的顺序为 :1、3、4、7、8、13 需要按照列表中的字典的date的大小,由小到大进行排序,python代码怎么写? 有可能不止一个a,b,可能有数个列表需要这样的排序,怎么写? 怎么排序比较快且代码简洁点? 谢谢
查看完整描述

2 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

a = [{'info1': 'someinfo', 'date': 1}, {'info1': 'someinfo', 'date': 4}, {'info1': 'someinfo', 'date': 7}, {'info1': 'someinfo', 'date': 13}]
b = [{'info1': 'someinfo', 'date': 3}, {'info1': 'someinfo', 'date': 8}]

new_dic, result = dict(), []
# 将date的值作为key构建新的字典
for d in a + b:
    new_dic[d.get('date')] = d
# 使用sorted()对新的字典排序,然后将需要的结果添加到列表中
for d in sorted(new_dic.items()):
    result.append(d[1])

print(result)

功能实现了,不过这个时间复杂度...
最简单的办法应该是这样,一行搞定:

print(sorted(a + b, key=lambda dic: dic['date']))
查看完整回答
反对 回复 2019-03-01
?
PIPIONE

TA贡献1829条经验 获得超9个赞

不好意思。。。想起来怎么干了,平时排序用的少了。。

这个问题直接用sorted函数加上高阶key函数就可以解决了,代码挺简洁的。。

all_bar = []
a = [{'info1' : 'someinfo', 'date' : 1}, {'info1' : 'someinfo', 'date' : 4}, {'info1' : 'someinfo', 'date' : 7}, {'info1' : 'someinfo', 'date' : 13}]
b = [{'info1' : 'someinfo', 'date' : 3}, {'info1' : 'someinfo', 'date' : 8}]

c = [{'info1' : 'someinfo', 'date' : 1}, {'info1' : 'someinfo', 'date' : 3}, {'info1' : 'someinfo', 'date' : 4}, {'info1' : 'someinfo', 'date' : 7}, {'info1' : 'someinfo', 'date' : 8}, {'info1' : 'someinfo', 'date' : 13}]

all_bar.extend(a)
all_bar.extend(b)

sorted(all_bar, key=lambda dic : dic['date'])

这样无论原本的数据有几个,先进行extend,最后再排序就可以了

效率不会太差

查看完整回答
反对 回复 2019-03-01
  • 2 回答
  • 0 关注
  • 629 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信