我最初使用JSON格式的产品,挑战是按每单位最优价格(prdata3,prdata2,prdata1)对此列表进行排序:
{'prdata3': {'variation': 'stand', 'price': '78 54', 'amount': '6',
'url': 'https://www.productwebaddress.com/3'},
'prdata2': {'variation': 'stand', 'price': '15 24', 'amount': '1',
'url': 'https://www.productwebaddress.com/2'},
'prdata1': {'variation': 'vc', 'price': '78 54', 'amount': '12',
'url': 'https://www.productwebaddress.com/1'}}
价格需要除以金额,列表需要按此值排序,所以在我的例子中输出需要是(prdata1(6,55),prdata3(13,09),prdata2(15) ,24)):
{'prdata1': {'variation': 'vc', 'price': '78 54', 'amount': '12', 'url': 'https://www.productwebaddress.com/1'}, 'prdata3': {'variation': 'stand', 'price': '78 54', 'amount': '6', 'url': 'https://www.productwebaddress.com/3'}, 'prdata2': {'variation': 'stand', 'price': '15 24', 'amount': '1', 'url': 'https://www.productwebaddress.com/2'}}
这里最好的策略是什么?我尽力先用“为每个人”进去,寻找价格,用点替换空格,除以金额,然后使用此结果对我的列表进行排序:sorted(mylist.items(), key=lambda t: t[1])
......但我的结果是关键,对吗?
答案 0 :(得分:0)
您无法对字典进行排序,因为字典没有顺序。
但您可以执行以下操作:
print sorted(a.items(),key=lambda x:float(x[1]['price'])/int(x[1]['amount']))
输出:
[('prdata1', {'url': 'https://www.productwebaddress.com/1', 'price': '78.54', 'amount': '12', 'variation': 'vc'}),
('prdata3', {'url': 'https://www.productwebaddress.com/3', 'price': '78.54', 'amount': '6', 'variation': 'stand'}),
('prdata2', {'url': 'https://www.productwebaddress.com/2', 'price': '15.24', 'amount': '1', 'variation': 'stand'})]
并且,如果真的很重要,您可以使用collections.OrderedDict
来保留字典结构。
from collections import OrderedDict
print OrderedDict(sorted(a.items(),key=lambda x:float(x[1]['price'])/int(x[1]['amount'])))
输出:
OrderedDict([('prdata1', {'url': 'https://www.productwebaddress.com/1', 'price': '78.54', 'amount': '12', 'variation': 'vc'}),
('prdata3', {'url': 'https://www.productwebaddress.com/3', 'price': '78.54', 'amount': '6', 'variation': 'stand'}),
('prdata2', {'url': 'https://www.productwebaddress.com/2', 'price': '15.24', 'amount': '1', 'variation': 'stand'})])
答案 1 :(得分:0)
欢迎使用Stack Overflow。
如果你能向我们展示一个代码片段,我会很高兴,所以我们可以查看它,看看你可能会陷入困境。
这可能是一个单行,因为明确的规范,它会像(伪代码,不会运行):
sorted(data, key=lambda x: float(x['price'].replace(' ', '.')) / int(x['amount']))
我希望这会有所帮助,但如果没有,请提供一些代码。