关于python字典中、正确的是_如何正确排序Python字典中的项目?

I have created a dictionary in python to deal handle the change for a purchase.

money = { '$100.00' : 0, '$50.00' : 0, '$20.00' : 0,'$10.00' : 0,

'$5.00' : 0, '$1.00' : 0,'$0.25' : 0, '$0.10' : 0, '$0.05' : 0,

'$0.01' : 0}

However when I want to print this, I can't seem to be able to do this from "least to greatest" piece of currency.

This is what I have done in an attempt to sort it:

keyList = list(money.keys())

keyList.sort()

for key in keyList:

print(key, money[key])

However the result given goes from ...$1 -> $10 -> $100 -> $20...Any suggestions so it will be $1 -> $5 -> $10...?

解决方案

This is happening because you are sorting strings, which are sorted lexicographically (order in which it would show up if it was in an English dictionary).

What you want is to sort them by their floatified values, which can be done like this:

>>> money = { '$100.00' : 0, '$50.00' : 0, '$20.00' : 0,'$10.00' : 0,

... '$5.00' : 0, '$1.00' : 0,'$0.25' : 0, '$0.10' : 0, '$0.05' : 0,

... '$0.01' : 0}

>>> for val in sorted(money, key=lambda s: float(s.lstrip("$"))):

... print(val, money[val])

...

$0.01 0

$0.05 0

$0.10 0

$0.25 0

$1.00 0

$5.00 0

$10.00 0

$20.00 0

$50.00 0

$100.00 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值