按属性顺序迭代字典列表

dot*_*hen 5 python sorting

考虑dict具有date属性和amount属性的s列表:

transactions = [
    {'date': '2013-05-12', 'amount': 1723},
    {'date': '2013-07-23', 'amount': 4523},
    {'date': '2013-02-01', 'amount': 2984},
]
Run Code Online (Sandbox Code Playgroud)

我想添加一个 balance 属性,但为此我必须按date顺序遍历列表:

balance = 0
for t in transactsions:    # Order by date
    balance += t['amount']
    t['balance'] = balance
Run Code Online (Sandbox Code Playgroud)

怎么办呢?如果我dictsTransaction具有dateamount属性的对象替换,那有可能吗?

per*_*sid 3

是的,这两种情况都可以通过函数sorted()的“key”关键字参数实现。看一下片段:

>>> l = [1, 3, 2]
>>> sorted(l)
[1, 2, 3]
>>> sorted(l, key=lambda x: x**2)
[1, 2, 3]
>>> sorted(l, key=lambda x: -x)
[3, 2, 1]
Run Code Online (Sandbox Code Playgroud)

您可以将可调用对象作为“key”关键字参数传递给sorted(),并且可调用对象将用于提供排序键。对于第一个问题,您可以将事务包装在排序中,并将 lambda x: x['date] 作为“键”传递。对于对象,只需将“key”更改为 lambda x: x.date 之类的内容。