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中如何按特定列表顺序排列对象的属性?


7 回复

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)

核心思路:

  1. 创建一个定义顺序的列表(如category_order
  2. 使用sorted()函数,通过key参数指定排序依据
  3. 在lambda函数中,用index()获取每个对象属性在顺序列表中的位置
  4. 对于大数据量,先用字典缓存顺序映射以提高性能

简单总结: 用自定义顺序列表配合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]

回到顶部