繁体   English   中英

基于属性的复杂种类的对象列表

[英]Complex sort of object list based on attribute

我有一个从json文件读取的对象列表。 我想根据对象属性对该列表进行排序,但是由于某些对象中缺少该属性,因此对于我的技能而言,此通常简单的任务变得有些复杂。 因此,当解释器尝试访问缺少该属性的第一个对象时,它将产生错误。

产生的错误:

KeyError: 'event_readtime'

生产它的生产线:

self.data.sort(key=lambda obj: getattr(obj, obj["event_readtime"]), reverse=True)

我基本上要问的是一种检查键对象“ event_readtime”是否存在于字典对象中的方法,每个字典文件都被读入该对象并将其并入键谓词中。

编辑:我忘记提及的一个重要细节是该属性的类型为int 因此,排序(反向)应按降序对数字进行排序。 此外,理想情况下,不具有此属性的对象应该在列表的末尾。

以下代码可以解决您的问题:

self.data.sort(key=lambda obj: obj.get("event_readtime")), reverse=True)

这利用了Python字典的.get()方法 ,该方法将获取所提供键的值,如果找不到该键,则将返回None

请注意,如果返回值None对您不起作用,例如,如果您希望所有没有“ event_readtime”的项目都排序到列表的末尾,则还可以为get()提供默认值。 ,您可能要尝试以下操作:

import sys
MAX = sys.maxint # The largest int value available
self.data.sort(key=lambda obj: obj.get("event_readtime", MAX)), reverse=True)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM