0
我有一個包含name: number
對的字典。在排序前將字典值轉換爲十進制或浮點數
名稱和數字都作爲字符串存儲,但數字在使用前始終轉換爲小數。如果我嘗試按值對字典進行排序,它將使用該值作爲字符串,然後根據該值進行排序,而不是按照其十進制表示法進行排序。
下面的代碼演示了這一點:
import collections
import operator
from decimal import *
TWODECIMALPLACES = Decimal(10) ** -2
adict = {'fred': Decimal(6.56).quantize(TWODECIMALPLACES),
'paul': Decimal(47.91).quantize(TWODECIMALPLACES),
'george': Decimal(2.59).quantize(TWODECIMALPLACES),
'ringo': Decimal(11.50).quantize(TWODECIMALPLACES),
'john': Decimal(1.57).quantize(TWODECIMALPLACES)}
bdict = {'fred': "6.56", 'paul': "47.91", 'george': "2.59",
'ringo': "11.50", 'john': "1.57"}
print ("adict" + str(adict) + "\n")
print ("bdict" + str(bdict) + "\n")
sadict = sorted(adict.items(), key=operator.itemgetter(1), reverse = True)
sbdict = sorted(bdict.items(), key=operator.itemgetter(1), reverse = True)
print ("sadict " + str(sadict) + "\n")
print ("sbdict " + str(sbdict) + "\n")
for idx, item in enumerate(sadict):
print (str(sadict[idx][0]) + " : " + str(sadict[idx][1]))
for idx, item in enumerate(sbdict):
print (str(sbdict[idx][0]) + " : " + str(sbdict[idx][1]))
如何我所以正確排序值進行排序之前投的字典值的浮動或十進制?
謝謝,這工作,但我從來不知道如何閱讀或理解lambda函數。我有複製粘貼他們幾次,他們的工作,但我不知道如何......他們不完全可讀。 – Zac
@Zac:'lambda參數:expr'就像'def functionname(arguments):return expr'。所以'lambda i:float(i [1])'和def key_function(i):return float(i [1])'是一樣的,但沒有名字。 –
將'lambda i:float(i [1])'改爲'lambda i:(-float(i [1]),i [0])'和'reverse = False'可以按值降序排列,在關係的情況下,按字母順序排列。 'key'返回的值不一定是數字,它可以是可以排序的東西。 – Bakuriu