我在python中创建了一个字典来处理购买的变更。
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}
然而,当我想要打印时,我似乎无法从“最少到最大”的货币中做到这一点。
这是我在尝试对其进行排序时所做的:
keyList = list(money.keys())
keyList.sort()
for key in keyList:
print(key, money[key])
然而,给出的结果来自...... $ 1 - > 10美元 - > 100美元 - > 20美元...任何建议,所以它将是$ 1 - > $ 5 - > $ 10 ...?
答案 0 :(得分:3)
排序按字典顺序进行,即按字母顺序,一次一个字符。更改排序功能以删除美元符号并转换为浮动:
keyList.sort(key=lambda x:float(x[1:]))
或者更好的是,从密钥中移除"$"
,使密钥保持浮动状态,并且仅在打印时添加"$"
答案 1 :(得分:3)
这种情况正在发生,因为您正在排序字符串,这些字符串按字典顺序排序(如果它出现在英语词典中,它将显示在其中的顺序)。
你想要的是按照浮动值对它们进行排序,这可以这样做:
>>> 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
答案 2 :(得分:0)
由于您要存储Strings
,因此会按String
值对其进行排序。您需要将它们转换为Decimals
(建议处理金钱),然后您就可以对它们进行排序。
#Hint:
from decimal import Decimal
dollarString = '$100.00'
dollarDecimal = Decimal(dollarString.strip('$'))
答案 3 :(得分:0)
如果您不介意第三方图书馆,请查看natsort。它专为与此类似的情况而设计
import natsort
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}
keylist = natsort.natsorted(money)
print(keylist)
# prints ['$0.01', '$0.05', '$0.10', '$0.25', '$1.00', '$5.00', '$10.00', '$20.00', '$50.00', '$100.00']
或者,如果您想要就地排序:
keylist = list(money)
keylist.sort(key=natsort.natsort_key)
print(keylist)
# prints ['$0.01', '$0.05', '$0.10', '$0.25', '$1.00', '$5.00', '$10.00', '$20.00', '$50.00', '$100.00']
Natsort会自动处理字符串中的数字,因此您可以获得自然的排序顺序,而不是字典顺序。