如何在Python字典中正确排序项目?
我已经用python创建了一个字典来处理购买的更改如何在Python字典中正确排序项目?,python,dictionary,Python,Dictionary,我已经用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} 然而,当我想打印这个时,我似乎无法从“最小”到“最大”的货币进行打印 这是我在尝试对其进行排序时所做的
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…?排序是按字典顺序进行的,即按字母顺序,一次一个字符。更改排序函数以删除美元符号并转换为浮动:
keyList.sort(key=lambda x:float(x[1:]))
或者更好的方法是,从键中删除
“$”
,将键保留为浮点数,并且在打印时只添加“$”
。排序按字典顺序进行,即按字母顺序,一次一个字符。更改排序函数以删除美元符号并转换为浮动:
keyList.sort(key=lambda x:float(x[1:]))
或者更好的方法是,从键中删除
“$”
,将键保留为浮点数,并且在打印时只添加“$”
,因为您存储的是字符串
,它会按其字符串
值对其进行排序。您需要将它们转换为类似于小数
(建议用于处理金钱),然后才能对它们进行排序
#Hint:
from decimal import Decimal
dollarString = '$100.00'
dollarDecimal = Decimal(dollarString.strip('$'))
由于您存储的是
字符串
,因此它将根据字符串的值对其进行排序。您需要将它们转换为类似于小数
(建议用于处理金钱),然后才能对它们进行排序
#Hint:
from decimal import Decimal
dollarString = '$100.00'
dollarDecimal = Decimal(dollarString.strip('$'))
发生这种情况是因为您正在对字符串进行排序,这些字符串是按字典顺序排序的(如果是在英语字典中,则按其显示的顺序)
您需要的是按照它们的浮动值对它们进行排序,可以这样做:
>>> 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
发生这种情况是因为您正在对字符串进行排序,这些字符串是按字典顺序排序的(如果是在英语字典中,则按其显示的顺序)
您需要的是按照它们的浮动值对它们进行排序,可以这样做:
>>> 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
如果您不介意第三方库,请查看。它是专为这种情况设计的
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会自动处理字符串中的数字,因此您可以获得自然的排序顺序,而不是字典顺序。如果您不介意第三方库,请查看。它是专为这种情况设计的
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自动处理字符串中的数字,因此您可以获得自然的排序顺序,而不是字典顺序