【问题标题】:Python - Formatting items in a list of numbers to be strings with currency symbolPython - 将数字列表中的项目格式化为带有货币符号的字符串
【发布时间】:2019-10-24 08:02:45
【问题描述】:

我有一个数字列表,这些数字是货币值,我想将其转换为带有符号的货币:

当前列表

list = [200,4002,4555,7533]

如果我打印上面的列表,下面给出的是返回的内容:

[(Decimal('200'), Decimal('4002'), Decimal('4555'), Decimal('7533')]

预期输出

list = ['$200','$4,002','$4,555','$7,533'] <<--These are basically number formatted for 1000's separator with the currency symbol

【问题讨论】:

  • 您提供的列表不是有效的 Python。你的意思是这些项目是字符串?
  • 您确实意识到输出将是一个字符串列表,对吧?
  • @KlausD,是的,这就是我期望的输出
  • @Madi7 是的,这是预期的输出

标签: python list


【解决方案1】:

假设您希望输出为字符串:

In [123]: lst = [200,4002,4555,7533]

In [124]: [f'${cur:,}' for cur in lst]
Out[124]: ['$200', '$4,002', '$4,555', '$7,533']

也不要将你的变量命名为一些内置的。

【讨论】:

  • 感谢您的回复。我在尝试输入数据时收到错误TypeError: unsupported format string passed to tuple.__format__。有关导致该问题的任何想法。
  • @scottmartin 你使用的是哪个版本的 Python?
  • 使用python 3.7
  • @scottmartin 这很奇怪。你是怎么运行的?你能像我在新会话中那样运行它吗?
  • 是的,我尝试在不同的环境中运行它,得到相同的结果。但是,如果我使用您使用的示例列表,它工作正常,所以我不确定它是否与我的数据有关.但它们只是我想要转换的数字..
【解决方案2】:

避免对变量使用像list 这样的内置名称。如果不转换为字符串,您也无法以这种格式输出,如下所示:

l = [200, 4002, 4555, 7533]

l = ['${:0,.0f}'.format(x) for x in l]
print(l)

打印:

['$200', '$4,002', '$4,555', '$7,533']

【讨论】:

    【解决方案3】:

    与其手动将列表中的值格式化为包含货币表示的字符串,不如使用专门用于此工作的标准库函数。在这里,您可能想要使用来自locale 模块的函数。这些函数提供了一种方便的方法,例如以适合当前区域设置的格式表示日期、时间和货币。区域设置可以由运行程序的计算机的操作系统设置,也可以由程序本身的程序员设置。

    您要做的第一件事是加载locale 模块。然后设置区域设置,系统默认设置:

    import locale
    
    locale.setlocale(locale.LC_ALL, "")   # to use the system-wide locale setting
    

    或您自己选择的语言环境:

    import locale
    
    locale.setlocale(locale.LC_ALL, "en_US.utf-8")   # to use the USA locale
    

    现在,您可以使用currency 函数使用当前区域设置格式化值:

    lst = [200, 4002, 4555, 7533]
    cur_lst = [locale.currency(val) for val in lst]
    
    print(cur_list)
    ['$200.00', '$4002.00', '$4555.00', '$7533.00']
    

    currency 函数具有三个选项,可让您调整输出。 grouping 选项将插入适当的分组标记以分隔数千、数百万等:

    locale.currency(123456, grouping=True)
    '$123,456.00'
    
    locale.currency(123456, grouping=False)  # the default
    '$123456.00'
    

    international 选项使用国际标准货币缩写代替货币符号:

    locale.currency(123456, international=True)
    'USD 123456.00'
    
    locale.currency(123456, international=False)  # the default
    '$123456.00'
    

    最后,将symbol 选项设置为True 会完全禁止显示货币符号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-08
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多