大家好,
当使用sorted()函数对字典中的百分比值进行排序时,我遇到了一个问题。当我到达负数时,它将首先对最大的负数进行排序,然后再对第二大的负数进行排序。我希望最小的负数首先出现。有什么办法可以修改我的sorted()来达到目的吗?干杯!
yoy_dict = sorted(yoy_dict.items(), key=lambda x: x[1], reverse = True)
yoy_dict = [('HOUGANG', '1.130759%'),
('JURONG EAST', '0.786807%'),
('PUNGGOL', '0.238738%'),
('SEMBAWANG', '-2.150383%'),
('WOODLANDS', '-2.043103%'),
('CHOA CHU KANG', '-1.923021%'),
('SENGKANG', '-1.548278%'),
('MARINE PARADE', '-1.445532%'),
('CENTRAL AREA', '-1.266556%'),
('JURONG WEST', '-1.037612%'),
('YISHUN', '-0.843832%'),
('BUKIT BATOK', '-0.296952%')]
答案 0 :(得分:6)
您需要将值转换为float
,以避免对字符串进行排序:
res = sorted(yoy_dict.items(), key=lambda x: float(x[1][:-1]), reverse=True)
结果:
print(res)
[('HOUGANG', '1.130759%'),
('JURONG EAST', '0.786807%'),
('PUNGGOL', '0.238738%'),
('BUKIT BATOK', '-0.296952%'),
('YISHUN', '-0.843832%'),
('JURONG WEST', '-1.037612%'),
('CENTRAL AREA', '-1.266556%'),
('MARINE PARADE', '-1.445532%'),
('SENGKANG', '-1.548278%'),
('CHOA CHU KANG', '-1.923021%'),
('WOODLANDS', '-2.043103%'),
('SEMBAWANG', '-2.150383%')]
答案 1 :(得分:0)
您的问题似乎是由于使用字符串而不是数字来存储百分比值所致。您需要将字符串转换为浮点数。
key=lambda x: float(x[1][:-1])
注意:
10 > 9 # True
'10' > '9' # False
这是因为字符串被及时比较了一个字符。当Python在两个字符串中找到第一个不同的字符时,它将选择最大的字符并在此处停止。