带有负值的Python sort()问题

今天是个好日子,

我在使用sorted()函数对dict中的百分比值进行排序时遇到了问题.当我得到负数时,它会排序最大的负数,然后是第二大的负数.我希望最小的负数首先出现.有没有办法修改我的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%')]

最佳答案 似乎您的问题是由于使用字符串而不是数字来存储百分比值.您需要将字符串转换为浮点数.

 key=lambda x: float(x[1][:-1])

注意:

10 > 9  # True
'10' > '9'  # False

这是因为字符串正在及时比较一个字符.当Python在两个字符串中找到第一个不同的字符时,它会选择最大字符并在此处停止.

点赞