我对python编程很陌生,还没有购买有关此问题的教科书(我今天在商店或亚马逊购买)。与此同时,你能帮助我解决我遇到的以下问题吗?
我有一个像这样的字典对象列表:
stock = [
{ 'date': '2012', 'amount': '1.45', 'type': 'one'},
{ 'date': '2012', 'amount': '1.4', 'type': 'two'},
{ 'date': '2011', 'amount': '1.35', 'type': 'three'},
{ 'date': '2012', 'amount': '1.35', 'type': 'four'}
]
我想按金额日期列排序列表,然后按金额列排序,以便排序列表如下所示:
stock = [
{ 'date': '2011', 'amount': '1.35', 'type': 'three'},
{ 'date': '2012', 'amount': '1.35', 'type': 'four'},
{ 'date': '2012', 'amount': '1.4', 'type': 'two'},
{ 'date': '2012', 'amount': '1.45', 'type': 'one'}
]
我现在认为我需要使用sorted()但作为初学者,我很难理解我所看到的概念。
我试过了:
from operator import itemgetter
all_amounts = itemgetter("amount")
stock.sort(key = all_amounts)
但是这导致了一个按字母数字而不是数字排序的列表。
有人可以告诉我如何实现这种看似简单的排序吗?感谢您!
答案 0 :(得分:3)
对于operator.itemgetter
,您的排序条件过于复杂。您将不得不使用lambda函数:
stock.sort(key=lambda x: (int(x['date']), float(x['amount'])))
或
all_amounts = lambda x: (int(x['date']), float(x['amount']))
stock.sort(key=all_amounts)
答案 1 :(得分:1)
首先将数据转换为适当的格式:
stock = [
{ 'date': int(x['date']), 'amount': float(x['amount']), 'type': x['type']}
for x in stock
]
现在stock.sort(key=all_amounts)
将返回正确的结果。
由于您似乎是编程方面的新手,如果可以的话,这里有一个通用建议:
正确的数据结构是成功的90%。不要试图通过编写更多代码来解决损坏的数据。创建一个适合您任务的结构,并尽可能少地编写代码。
答案 2 :(得分:0)
您还可以使用python排序为stable的事实:
stock.sort(key=lambda x: int(x["amount"]))
stock.sort(key=lambda x: int(x["date"]))
由于具有相同键的项目在排序时保持相对位置(它们从不交换),您可以通过多次排序来构建复杂的排序。