# 有两个列表如下
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 回答
![?](http://img1.sycdn.imooc.com/5333a0350001692e02200220-100-100.jpg)
繁花如伊
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']))
![?](http://img1.sycdn.imooc.com/545863e80001889e02200220-100-100.jpg)
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,最后再排序就可以了
效率不会太差
添加回答
举报
0/150
提交
取消