0

Python 2.4 を使用していることに注意してください。これは私が d_ourbook と呼んだ辞書です:

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

値は float のリストです。同じ辞書を表示する関数を作成しようとしていますが、値は 2 つの浮動小数点に制限されています。

私は浮動小数点を作成しました --> two(floatnum) と呼ばれる 2decimal 文字列関数:

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

辞書をループまたは圧縮してすべての値を two(value) に変換する私の関数は悪夢であり、必要な 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

どんな助けも命の恩人です。

4

1 に答える 1

0

d_nameそれがあなたが提供した辞書であると仮定するとd_name.values()、フロートのリストのリストのリストです。two()したがって、 value は float のリストのリストであり、エラーなしでそれを渡すことはできません。

それが解決されたとしても、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']}
于 2013-04-03T06:09:46.163 に答える