如何根据对象的属性对对象列表进行排序?

新手上路,请多包涵

我有一个 Python 对象列表,我想按每个对象的特定属性对其进行排序:

 >>> ut
[Tag(name="toe", count=10), Tag(name="leg", count=2), ...]

如何按 .count 降序排列列表?

原文由 Nick Sergeant 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 479
2 个回答
# To sort the list in place...
ut.sort(key=lambda x: x.count, reverse=True)

# To return a new list, use the sorted() built-in function...
newlist = sorted(ut, key=lambda x: x.count, reverse=True)

有关 按键排序的 更多信息。

原文由 Kenan Banks 发布,翻译遵循 CC BY-SA 4.0 许可协议

最快的方法是使用 operator.attrgetter("count") ,尤其是当您的列表有很多记录时。但是,这可能会在 Python 的预运算符版本上运行,因此最好有一个回退机制。那么您可能想要执行以下操作:

 try: import operator
except ImportError: keyfun= lambda x: x.count # use a lambda if no operator module
else: keyfun= operator.attrgetter("count") # use operator since it's faster than lambda

ut.sort(key=keyfun, reverse=True) # sort in-place

原文由 tzot 发布,翻译遵循 CC BY-SA 3.0 许可协议

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