2013-04-02 5 views
0

Примечание, используя Python 2.4. Вот словарь, который я назвал d_ourbook:конвертировать значения float в словаре в два десятичных знака

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

Значение представляет собой список поплавков. Я пытаюсь сделать функцию, которая отображает тот же словарь, но со значениями, ограниченными двумя плавающими точками.

я сделал с плавающей точкой -> 2decimal функции строка называется два (floatnum):

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

Моя функция в цикле или почтовый индекс по словарю и преобразовать все значения в два (значения) были кошмар и возвращаемый аргумент с поплатой:

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 

Любая помощь будет спасателем.

ответ

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']} 
Смежные вопросы