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

# 有两个列表如下
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、13
b 的顺序为 :3、8

排序后:
c的顺序为 :1、3、4、7、8、13

需要按照列表中的字典的date的大小,由小到大进行排序,python代码怎么写?

有可能不止一个a,b,可能有数个列表需要这样的排序,怎么写?

怎么排序比较快且代码简洁点?

谢谢

阅读 4.6k
2 个回答
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']))

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

这个问题直接用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,最后再排序就可以了

效率不会太差

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题