在 python 中以美元格式对值对进行排序
sorting value pairs with one pair being in dollar format in python
所以我有一个这样的列表。
items = [('30-Apr-2018', '[=11=].14'), ('30-Apr-2018', ',534.77'), ('29-Apr-2018', '-.34')]
我尝试使用这两个命令对其进行排序,我认为执行相同的排序
items = sorted(items, key=lambda x: x[1])
items = sorted(items,key=itemgetter(1))
但他们总是出问题。好像排序完成了?但由于某种原因不正确,我怀疑这是由于列表对中第二个元素的格式所致。关于如何排序的任何建议?我看到的唯一选择是将美元值转换为小数,然后再次尝试排序,并可能添加美元符号,但也许其他人会有更好的解决方案。
完整列表在这里。
排序前 = [('30-Apr-2018', '$0.14'), ('30-Apr-2018', '$101.65'), ('30-Apr-2018', '$1,534.77'), ('29- 2018 年 4 月', '-37.78 美元'), ('2018 年 4 月 29 日', '6.31 美元'), ('2018 年 4 月 29 日', '-4.76 美元'), ('2018 年 4 月 29 日', ' -$39.55'), ('28-Apr-2018', '-$664.78'), ('28-Apr-2018', '-$142.25'), ('28-Apr-2018', '-$9.12'), ('27-Apr-2018', '-$7.34'), ('27-Apr-2018', '-$7.34'), ('26-Apr-2018', '-$7.34'), ('26-Apr -2018', '-$13.23'), ('25-Apr-2018', '-$7.34'), ('25-Apr-2018', '-$2.09'), ('24-Apr-2018', ' -$27.27'), ('24-Apr-2018', '-$9.96'), ('24-Apr-2018', '-$110.00'), ('23-Apr-2018', '-$7.34'), ('22-Apr-2018', '-$87.02'), ('22-Apr-2018', '-$5.41'), ('22-Apr-2018', '-$21.11'), ('21-Apr -2018', '-$12.69'), ('21-Apr-2018', '-$6.75'), ('21-Apr-2018', '-$500.00'), ('21-Apr-2018', ' -$15.67'), ('20-Apr-2018', '-$41.74'), ('20-Apr-2018', '-$20.47'), ('20-Apr-2018', '$31.60'), ( '2018 年 4 月 19 日','-$7.34'),('2018 年 4 月 19 日','-$2.09'),('2018 年 4 月 19 日','-$5.24'),('19-Apr- 2018', '-22.70 美元'), ('2018 年 4 月 18 日', '-7.34 美元'), ('2018 年 4 月 17 日', '- $7.34'), ('17-Apr-2018', '-$4.99'), ('17-Apr-2018', '-$7.34'), ('16-Apr-2018', '-$7.33'), ( '2018 年 4 月 16 日','-59.00 美元'),('2018 年 4 月 15 日','-42.75 美元'),('2018 年 4 月 14 日','-9.43 美元'),('13-Apr- 2018', '1,545.79 美元'), ('2018 年 4 月 12 日', '-7.34 美元'), ('2018 年 4 月 12 日', '-11.63 美元'), ('2018 年 4 月 12 日', '-14.44 美元'), ('2018 年 4 月 11 日', '-$81.31'), ('2018 年 4 月 10 日', '-79.74 美元'), ('2018 年 4 月 10 日', '-$7.34'), (' 2018 年 4 月 10 日,'-11.11 美元'),('2018 年 4 月 9 日','-7.34 美元'),('2018 年 4 月 7 日','-72.42 美元'),('2018 年 4 月 6 日') ', '-$3.01'), ('06-Apr-2018', '-$7.34'), ('05-Apr-2018', '-$7.34'), ('05-Apr-2018', '-$9.20 '), ('2018 年 4 月 4 日', '-$7.34'), ('2018 年 4 月 3 日', '-7.34 美元'), ('2018 年 4 月 3 日', '-$460.00'), (' 2018 年 4 月 3 日,'-7.34 美元'),('2018 年 4 月 2 日','-7.34 美元'),('2018 年 4 月 2 日','289.04 美元'),('2018 年 4 月 1 日' , '-$6.30'), ('01-Apr-2018', '-$7.50'), ('01-Apr-2018', '-$13.28')]
排序后 = [('30-Apr-2018', '$0.14'), ('30-Apr-2018', '$1,534.77'), ('13-Apr-2018', '$1,545.79') ,('2018 年 4 月 30 日','101.65 美元'),('2018 年 4 月 2 日','289.04 美元'),('2018 年 4 月 20 日','31.60 美元'),('2018 年 4 月 29 日' ', '6.31 美元'), ('2018 年 4 月 10 日', '-11.11 美元'), ('2018 年 4 月 12 日', '-11.63 美元'), ('2018 年 4 月 24 日', '-110.00 美元' ), ('21-Apr-2018', '-$12.69'), ('26-Apr-2018', '-$13.23'), ('01-Apr-2018', '-$13.28'), ('12 -2018 年 4 月','-14.44 美元'),('2018 年 4 月 28 日','-142.25 美元'),('2018 年 4 月 21 日','-15.67 美元'),('2018 年 4 月 25 日' , '-$2.09'), ('19-Apr-2018', '-$2.09'), ('20-Apr-2018', '-$20.47'), ('22-Apr-2018', '-$21.11' ), ('2018 年 4 月 19 日', '-22.70 美元'), ('2018 年 4 月 24 日', '-27.27 美元'), ('2018 年 4 月 6 日', '-3.01 美元'), ('29 -2018 年 4 月','-37.78 美元'),('2018 年 4 月 29 日','-39.55 美元'),('2018 年 4 月 29 日','-4.76 美元'),('2018 年 4 月 17 日' , '-$4.99'), ('20-Apr-2018', '-$41.74'), ('15-Apr-2018', '-$42.75'), ('03-Apr-2018', '-$460.00' ), ('19-Apr-2018', '-$5.24'), ('22-Apr-2018', '-$5.41'), ('21-Apr-2018', '-$500.00'), ('16 -2018 年 4 月','-59.00 美元'),('2018 年 4 月 1 日','-6.30 美元'),('21 -2018 年 4 月','-6.75 美元'),('2018 年 4 月 28 日','-664.78 美元'),('2018 年 4 月 16 日','-7.33 美元'),('2018 年 4 月 27 日' , '-$7.34'), ('27-Apr-2018', '-$7.34'), ('26-Apr-2018', '-$7.34'), ('25-Apr-2018', '-$7.34' ), ('23-Apr-2018', '-$7.34'), ('19-Apr-2018', '-$7.34'), ('18-Apr-2018', '-$7.34'), ('17 -2018 年 4 月','-7.34 美元'),('2018 年 4 月 17 日','-7.34 美元'),('2018 年 4 月 12 日','-7.34 美元'),('2018 年 4 月 10 日' , '-7.34 美元'), ('2018 年 4 月 9 日', '-7.34 美元'), ('2018 年 4 月 6 日', '-7.34 美元'), ('2018 年 4 月 5 日', '-7.34 美元' ), ('2018 年 4 月 4 日', '-7.34 美元'), ('2018 年 4 月 3 日', '-7.34 美元'), ('2018 年 4 月 3 日', '-7.34 美元'), ('02 -2018 年 4 月','-7.34 美元'),('2018 年 4 月 1 日','-7.50 美元'),('2018 年 4 月 7 日','-72.42 美元'),('2018 年 4 月 10 日' , '-$79.74'), ('11-Apr-2018', '-$81.31'), ('22-Apr-2018', '-$87.02'), ('28-Apr-2018', '-$9.12' ), ('2018 年 4 月 5 日', '-9.20 美元'), ('2018 年 4 月 14 日', '-9.43 美元'), ('2018 年 4 月 24 日', '-9.96 美元')]
为了对您的价格进行排序,您首先需要将它们转换为数字格式(浮点数或整数)。因此,要转换您的字符串,您需要执行以下步骤:
- 删除所有
","
- 检查数字是否为负数(以
"-"
开头)
- 转换为数字为
float
- 转换为
int
您可以使用以下代码:
def convert(string):
string = string.replace(",","")
num_val = 0.0
if string[0]=="-":
num_val = -float(string[2:])
else:
num_val = float(string[1:])
# If you want integer value in cents
# return int(round(num_val*100.0))
return num_value
items = [(d, convert(p)) for (d,p) in items]
你得到的结果可以解释为,当对字符串进行排序时,你是一个字符一个字符地进行排序,"-" > "$"
所以所有的负数都在最后并按字典顺序排序。
使用列表理解进行格式化/转换:
items = [(date, float("".join(c for c in price if c!='$' and c!=','))) for date, price in items]
然后按预期排序...
所以我有一个这样的列表。
items = [('30-Apr-2018', '[=11=].14'), ('30-Apr-2018', ',534.77'), ('29-Apr-2018', '-.34')]
我尝试使用这两个命令对其进行排序,我认为执行相同的排序
items = sorted(items, key=lambda x: x[1])
items = sorted(items,key=itemgetter(1))
但他们总是出问题。好像排序完成了?但由于某种原因不正确,我怀疑这是由于列表对中第二个元素的格式所致。关于如何排序的任何建议?我看到的唯一选择是将美元值转换为小数,然后再次尝试排序,并可能添加美元符号,但也许其他人会有更好的解决方案。
完整列表在这里。 排序前 = [('30-Apr-2018', '$0.14'), ('30-Apr-2018', '$101.65'), ('30-Apr-2018', '$1,534.77'), ('29- 2018 年 4 月', '-37.78 美元'), ('2018 年 4 月 29 日', '6.31 美元'), ('2018 年 4 月 29 日', '-4.76 美元'), ('2018 年 4 月 29 日', ' -$39.55'), ('28-Apr-2018', '-$664.78'), ('28-Apr-2018', '-$142.25'), ('28-Apr-2018', '-$9.12'), ('27-Apr-2018', '-$7.34'), ('27-Apr-2018', '-$7.34'), ('26-Apr-2018', '-$7.34'), ('26-Apr -2018', '-$13.23'), ('25-Apr-2018', '-$7.34'), ('25-Apr-2018', '-$2.09'), ('24-Apr-2018', ' -$27.27'), ('24-Apr-2018', '-$9.96'), ('24-Apr-2018', '-$110.00'), ('23-Apr-2018', '-$7.34'), ('22-Apr-2018', '-$87.02'), ('22-Apr-2018', '-$5.41'), ('22-Apr-2018', '-$21.11'), ('21-Apr -2018', '-$12.69'), ('21-Apr-2018', '-$6.75'), ('21-Apr-2018', '-$500.00'), ('21-Apr-2018', ' -$15.67'), ('20-Apr-2018', '-$41.74'), ('20-Apr-2018', '-$20.47'), ('20-Apr-2018', '$31.60'), ( '2018 年 4 月 19 日','-$7.34'),('2018 年 4 月 19 日','-$2.09'),('2018 年 4 月 19 日','-$5.24'),('19-Apr- 2018', '-22.70 美元'), ('2018 年 4 月 18 日', '-7.34 美元'), ('2018 年 4 月 17 日', '- $7.34'), ('17-Apr-2018', '-$4.99'), ('17-Apr-2018', '-$7.34'), ('16-Apr-2018', '-$7.33'), ( '2018 年 4 月 16 日','-59.00 美元'),('2018 年 4 月 15 日','-42.75 美元'),('2018 年 4 月 14 日','-9.43 美元'),('13-Apr- 2018', '1,545.79 美元'), ('2018 年 4 月 12 日', '-7.34 美元'), ('2018 年 4 月 12 日', '-11.63 美元'), ('2018 年 4 月 12 日', '-14.44 美元'), ('2018 年 4 月 11 日', '-$81.31'), ('2018 年 4 月 10 日', '-79.74 美元'), ('2018 年 4 月 10 日', '-$7.34'), (' 2018 年 4 月 10 日,'-11.11 美元'),('2018 年 4 月 9 日','-7.34 美元'),('2018 年 4 月 7 日','-72.42 美元'),('2018 年 4 月 6 日') ', '-$3.01'), ('06-Apr-2018', '-$7.34'), ('05-Apr-2018', '-$7.34'), ('05-Apr-2018', '-$9.20 '), ('2018 年 4 月 4 日', '-$7.34'), ('2018 年 4 月 3 日', '-7.34 美元'), ('2018 年 4 月 3 日', '-$460.00'), (' 2018 年 4 月 3 日,'-7.34 美元'),('2018 年 4 月 2 日','-7.34 美元'),('2018 年 4 月 2 日','289.04 美元'),('2018 年 4 月 1 日' , '-$6.30'), ('01-Apr-2018', '-$7.50'), ('01-Apr-2018', '-$13.28')]
排序后 = [('30-Apr-2018', '$0.14'), ('30-Apr-2018', '$1,534.77'), ('13-Apr-2018', '$1,545.79') ,('2018 年 4 月 30 日','101.65 美元'),('2018 年 4 月 2 日','289.04 美元'),('2018 年 4 月 20 日','31.60 美元'),('2018 年 4 月 29 日' ', '6.31 美元'), ('2018 年 4 月 10 日', '-11.11 美元'), ('2018 年 4 月 12 日', '-11.63 美元'), ('2018 年 4 月 24 日', '-110.00 美元' ), ('21-Apr-2018', '-$12.69'), ('26-Apr-2018', '-$13.23'), ('01-Apr-2018', '-$13.28'), ('12 -2018 年 4 月','-14.44 美元'),('2018 年 4 月 28 日','-142.25 美元'),('2018 年 4 月 21 日','-15.67 美元'),('2018 年 4 月 25 日' , '-$2.09'), ('19-Apr-2018', '-$2.09'), ('20-Apr-2018', '-$20.47'), ('22-Apr-2018', '-$21.11' ), ('2018 年 4 月 19 日', '-22.70 美元'), ('2018 年 4 月 24 日', '-27.27 美元'), ('2018 年 4 月 6 日', '-3.01 美元'), ('29 -2018 年 4 月','-37.78 美元'),('2018 年 4 月 29 日','-39.55 美元'),('2018 年 4 月 29 日','-4.76 美元'),('2018 年 4 月 17 日' , '-$4.99'), ('20-Apr-2018', '-$41.74'), ('15-Apr-2018', '-$42.75'), ('03-Apr-2018', '-$460.00' ), ('19-Apr-2018', '-$5.24'), ('22-Apr-2018', '-$5.41'), ('21-Apr-2018', '-$500.00'), ('16 -2018 年 4 月','-59.00 美元'),('2018 年 4 月 1 日','-6.30 美元'),('21 -2018 年 4 月','-6.75 美元'),('2018 年 4 月 28 日','-664.78 美元'),('2018 年 4 月 16 日','-7.33 美元'),('2018 年 4 月 27 日' , '-$7.34'), ('27-Apr-2018', '-$7.34'), ('26-Apr-2018', '-$7.34'), ('25-Apr-2018', '-$7.34' ), ('23-Apr-2018', '-$7.34'), ('19-Apr-2018', '-$7.34'), ('18-Apr-2018', '-$7.34'), ('17 -2018 年 4 月','-7.34 美元'),('2018 年 4 月 17 日','-7.34 美元'),('2018 年 4 月 12 日','-7.34 美元'),('2018 年 4 月 10 日' , '-7.34 美元'), ('2018 年 4 月 9 日', '-7.34 美元'), ('2018 年 4 月 6 日', '-7.34 美元'), ('2018 年 4 月 5 日', '-7.34 美元' ), ('2018 年 4 月 4 日', '-7.34 美元'), ('2018 年 4 月 3 日', '-7.34 美元'), ('2018 年 4 月 3 日', '-7.34 美元'), ('02 -2018 年 4 月','-7.34 美元'),('2018 年 4 月 1 日','-7.50 美元'),('2018 年 4 月 7 日','-72.42 美元'),('2018 年 4 月 10 日' , '-$79.74'), ('11-Apr-2018', '-$81.31'), ('22-Apr-2018', '-$87.02'), ('28-Apr-2018', '-$9.12' ), ('2018 年 4 月 5 日', '-9.20 美元'), ('2018 年 4 月 14 日', '-9.43 美元'), ('2018 年 4 月 24 日', '-9.96 美元')]
为了对您的价格进行排序,您首先需要将它们转换为数字格式(浮点数或整数)。因此,要转换您的字符串,您需要执行以下步骤:
- 删除所有
","
- 检查数字是否为负数(以
"-"
开头) - 转换为数字为
float
- 转换为
int
您可以使用以下代码:
def convert(string):
string = string.replace(",","")
num_val = 0.0
if string[0]=="-":
num_val = -float(string[2:])
else:
num_val = float(string[1:])
# If you want integer value in cents
# return int(round(num_val*100.0))
return num_value
items = [(d, convert(p)) for (d,p) in items]
你得到的结果可以解释为,当对字符串进行排序时,你是一个字符一个字符地进行排序,"-" > "$"
所以所有的负数都在最后并按字典顺序排序。
使用列表理解进行格式化/转换:
items = [(date, float("".join(c for c in price if c!='$' and c!=','))) for date, price in items]
然后按预期排序...