Python中如何按特定列表顺序排列对象的属性?
我有一个列表。里头存的是对象,如何对这个列表的对象属性按照我指定的列表进行排序
list1=[object1, object2,object3]
其中 object1.name =‘a’, object2.name=‘b’, object3.name='c’
list2 =[‘c’,‘a’,‘b’]
那么如何得到 list1= [object3,object1,object2]呢?
项目中大约这个列表长度大概 300 个对象。新手上路,多多指教。环境是 python3.7
Python中如何按特定列表顺序排列对象的属性?
list1.sort(key=lamba x: list2.index(x.name))
class Item:
def __init__(self, name, category, price):
self.name = name
self.category = category
self.price = price
def __repr__(self):
return f"Item({self.name}, {self.category}, {self.price})"
# 原始对象列表
items = [
Item("Keyboard", "Electronics", 45),
Item("Notebook", "Stationery", 5),
Item("Mouse", "Electronics", 25),
Item("Pen", "Stationery", 2),
Item("Monitor", "Electronics", 300)
]
# 定义特定的排序顺序
category_order = ["Stationery", "Electronics", "Clothing"]
# 方法1:使用sorted()和index()
sorted_items = sorted(items, key=lambda x: category_order.index(x.category))
print("方法1 - 按类别顺序排序:")
print(sorted_items)
# 方法2:使用字典映射提高性能(适用于大数据量)
order_dict = {category: idx for idx, category in enumerate(category_order)}
sorted_items_dict = sorted(items, key=lambda x: order_dict.get(x.category, float('inf')))
print("\n方法2 - 使用字典映射排序:")
print(sorted_items_dict)
# 方法3:按多个属性排序(先按类别顺序,再按价格降序)
sorted_items_multi = sorted(items,
key=lambda x: (order_dict.get(x.category, float('inf')), -x.price))
print("\n方法3 - 先按类别顺序,再按价格降序:")
print(sorted_items_multi)
核心思路:
- 创建一个定义顺序的列表(如
category_order) - 使用
sorted()函数,通过key参数指定排序依据 - 在lambda函数中,用
index()获取每个对象属性在顺序列表中的位置 - 对于大数据量,先用字典缓存顺序映射以提高性能
简单总结: 用自定义顺序列表配合sorted的key参数就能搞定。
食谱第一章
食谱是什么?哪本书吗?
感谢大佬啊。😃
python cookbook
from operator import attrgetter
class MyObject(object):
□□□□def init(self, name): self.name = name
□□□□def repr(self): return self.name
list1 = []
for i in range(5):
□□□□list1.append(MyObject(‘object’+str(i)))
print(sorted(list1, key=attrgetter(‘name’), reverse=True))
# [object4, object3, object2, object1, object0]

