将字典中的浮点值转换为两位小数

时间:2013-04-02 00:26:43

标签: dictionary python-2.4

注意,使用Python 2.4。这是我称之为d_ourbook的词典:

 {'130405C00465000': [[8.6999999999999993, 8.9000000000000004, 0.50749999999999995, 32.810000000000002, -141.1575]]}

该值是浮点数列表。我正在尝试创建一个显示相同字典的函数,但值限制为两个浮点。

我做了一个浮点 - > 2decimal字符串函数称为二(floatnum):

def two(floatnum):
    return '%.2f' %(floatnum)

我循环或压缩字典并将所有值转换为两个(值)的函数一直是一场噩梦,并返回所需的float参数:

Traceback (most recent call last):
  File "esecombo.py", line 496, in ?
    print ' -- dt: ', dt(d_ourbook)
  File "esecombo.py", line 23, in dt
    new_d_name = dict(zip(d_name.keys(), [two(value)for value in d_name.values()]))
  File "esecombo.py", line 10, in two
    return '%.2f' %(floatnum)
TypeError: float argument required

任何帮助都会成为救星。

1 个答案:

答案 0 :(得分:0)

假设d_name是您提供的字典,则d_name.values()是浮点列表的列表。因此,值是浮动列表的列表,您无法在没有错误的情况下将其移至two()

即使你得到解决,zip也会根据最短的参数返回一些元组。 那样:

new_d_name = dict(zip(d_name.keys(), 
                      [two(value) for value in (d_name.values()[0][0])]))

结果为{'130405C00465000': '8.70'}

这假设所有值都是列表类型中的单项列表,如示例所示,在这种情况下您可能会使用:

new_d_name = dict(zip(d_name.keys(), 
                      [[two(value) for value in (d_name.values()[0][0])]]))

得到:

{'130405C00465000': ['8.70', '8.90', '0.51', '32.81', '-141.16']}