基于属性的复杂对象列表

时间:2015-11-27 14:07:16

标签: python sorting dictionary

我有一个从json文件中读取的对象列表。我想基于对象属性对该列表进行排序,但这通常简单的任务对我的技能来说变得有点复杂,因为在某些对象中这个属性缺失。因此,解释器在尝试访问缺少此属性的第一个对象时会产生错误。

产生错误:

KeyError: 'event_readtime'

产生它的线:

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

我基本上要问的是检查密钥" event_readtime"存在于字典对象中的每个json文件都被读入并将其合并到键谓词中。

编辑:我忘了提到的一个重要细节是该属性属于int类型。因此排序(反向)应按降序对数字进行排序。此外,没有此属性的对象应该理想地位于列表的末尾。

1 个答案:

答案 0 :(得分:2)

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

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

这使用了Python词典' .get() method,它会在提供的密钥处获取值,如果找不到密钥,则会返回None

请注意,如果get()的返回值对您不起作用,您也可以为None提供默认值,例如,如果您想要所有没有的项目a" event_readtime"排序到列表末尾,您可能需要尝试以下操作:

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