如何在按成员变量循环遍历字典时对输出进行排序?

2024-04-19 11:00:31 发布

您现在位置:Python中文网/ 问答频道 /正文

如何按成员变量对术语进行排序

class Item():
    def __init__(self, _name, _index, _price):
        self.name = _name
        self.index = _index
        self.price = _price

我想显示按指数或价格订购的商品信息。你知道吗

DicItems = {}
DicItems["Candy"] = Item("Candy", 1, 100)
DicItems["IceCream"] = Item("IceCream", 2, 500)
DicItems["Snack"] = Item("Snack", 3, 300)

按索引顺序打印项目列表 ->;结果

Candy     1 100
IceCream  2 500
Snack     3 300

按价格打印项目列表 ->;结果

Candy       1 100
Snack       3 300
IceCream    2 500

Tags: 项目namegtself列表index成员价格
3条回答

python中的字典没有任何顺序。你知道吗

对于您想要的,可以通过执行以下操作来实现:

from operator import  attrgetter
name_getter = attrgetter('name')
index_getter = attrgetter('index')
price_getter = attrgetter('price')

sorted_by_index = sorted(DicItems, key=index_getter)
sorted_by_name = sorted(DicItems, key=name_getter)
sorted_by_price = sorted(DicItems, key=price_getter)

准备代码:

class Item():
    def __init__(self, _name, _index, _price):
        self.name = _name
        self.index = _index
        self.price = _price
    def items(self):
        return self.name, self.index, self.price

d = {}
d["Candy"] = Item("Candy", 1, 100)
d["IceCream"] = Item("IceCream", 2, 500)
d["Snack"] = Item("Snack", 3, 300)

排序代码:

print [item.items() for item in sorted(d.values(), key = lambda x:x.index)]
print [item.items() for item in sorted(d.values(), key = lambda x:x.price)]

输出

[('Candy', 1, 100), ('IceCream', 2, 500), ('Snack', 3, 300)]
[('Candy', 1, 100), ('Snack', 3, 300), ('IceCream', 2, 500)]

或者我们可以用这样的attrgetter来概括它

from operator import attrgetter
def sorter(d, key):
    return [item.items() for item in sorted(d.values(), key = attrgetter(key))]

print sorter(d, "index")
print sorter(d, "name")
print sorter(d, "price")

输出

[('Candy', 1, 100), ('IceCream', 2, 500), ('Snack', 3, 300)]
[('Candy', 1, 100), ('IceCream', 2, 500), ('Snack', 3, 300)]
[('Candy', 1, 100), ('Snack', 3, 300), ('IceCream', 2, 500)]

更困难,但更普遍

from operator import attrgetter

class DictItems(dict):

     def sortByPrice():
         return sorted(self.values(), key=attrgetter('price'))

     def sortByIndex():
         return sorted(self.values(), key=attrgetter('index'))

d = DictItems()
d["Candy"] = Item("Candy", 1, 100)
d["IceCream"] = Item("IceCream", 2, 500)
d["Snack"] = Item("Snack", 3, 300)

d.sortByPrice()
d.sortByIndex()

相关问题 更多 >