Pythonic以棘手的顺序对字典列表进行排序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Pythonic以棘手的顺序对字典列表进行排序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1093字,纯文字阅读大概需要2分钟。
内容图文
![Pythonic以棘手的顺序对字典列表进行排序](/upload/InfoBanner/zyjiaocheng/757/45fea4211210458f9365bcd84769291b.jpg)
我有一个id列表,在适当的oder中排序:
ids = [1, 2, 4, 6, 5, 0, 3]
我还有一个字典列表,以一些随机的方式排序:
rez = [{'val': 7, 'id': 1}, {'val': 8, 'id': 2}, {'val': 2, 'id': 3}, {'val': 0, 'id': 4}, {'val': -1, 'id': 5}, {'val': -4, 'id': 6}, {'val': 9, 'id': 0}]
我的意图是以对应于ids的方式对rez列表进行排序:
rez = [{'val': 7, 'id': 1}, {'val': 8, 'id': 2}, {'val': 0, 'id': 4}, {'val': -4, 'id': 6}, {'val': -1, 'id': 5}, {'val': 9, 'id': 0}, {'val': 2, 'id': 3}]
我试过了:
rez.sort(key = lambda x: ids.index(x['id']))
然而这种方式对我来说太慢了,因为len(ids)> 150K,每个dict实际上有很多键(有些值有字符串).任何建议如何以最pythonic,但仍然最快的方式做到这一点?
解决方法:
您不需要排序,因为ids指定结果的整个顺序.您只需要通过其ID选择正确的元素:
rez_dict = {d['id']:d for d in rez}
rez_ordered = [rez_dict[id] for id in ids]
这使:
>>> rez_ordered
[{'id': 1, 'val': 7}, {'id': 2, 'val': 8}, {'id': 4, 'val': 0}, {'id': 6, 'val': -4}, {'id': 5, 'val': -1}, {'id': 0, 'val': 9}, {'id': 3, 'val': 2}]
这应该比排序更快,因为它可以平均在线性时间内完成,而排序是O(nlogn).
请注意,这假设每个id将有一个条目,如您的示例所示.
内容总结
以上是互联网集市为您收集整理的Pythonic以棘手的顺序对字典列表进行排序全部内容,希望文章能够帮你解决Pythonic以棘手的顺序对字典列表进行排序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。