2016-12-23 28 views
1

ではありません、私は辞書を記述しようとしていますように、以下のフォーマットとして浮動小数点値が含まれています。私は辞書を記述しようとしています書き込み辞書:TypeError例外:「フロート」オブジェクトのiterable

{'11': 0.5, '13': 1.0, '12': 0.5, -1: 3, '14': 0.0} 

形式のCSVファイルに:

11,0.5 
13,1.0 
12,0.5 
... 

私は以下のように関数を定義していますし、それは常に「interableないFloatオブジェクト」のエラーがあります。

def writeDict_test(r, filename):  
    r""" 
    r: dictionary object: {'1':0.9, '2':0.6,'3':0.5,...} 
    filename: include path and .csv file. e.g. "C:\Users\results.csv" 
    """ 
    with open(filename, "a") as input_file: 
     for k, v in r.items(): 
      for t in v:     
       line = "%s,%s" % ((k,) + t) 
       print(line, file=input_file) 

上記の方法は、辞書に整数値が含まれている場合に効果的です。私はPython 3.5を使用しています。 誰も私に説明して、私がこれを達成する方法を教えてもらえますか? ありがとうございました。

+0

は、あなたがあなたの 'writeDict_test'関数に渡している変数が含まれるようにあなたの質問を編集してもらえますか? –

+0

エラーは、あなたが浮動小数点数を超えて反復しようとしていると言います。私は2番目の 'v'は浮動小数点(erroreを引き起こす)だと思います。 – Lucas

+0

内側の 'for'はyorデータ構造のために必要ではありません。 '' 0.9 ''と '.9'の違いにも注意してください。あなたの前処理に応じて、1つは文字列かもしれません。 – Jasper

答えて

3

自分の価値観が、一つだけの要素が含まれている場合、あなたはこのようなpop()を使用することができ、あなたは、内側のループを必要としません:

my_dict = {'1':{'0.9'}, '2':{'0.6'},'3':{'0.5'}} 

with open(filename, 'w') as f: 
    for k, v in my_dict.items(): 
     f.write('{},{}\n'.format(k, v.pop())) 

、あなたのオリジナルの辞書は、あなたを変更したくない場合以下のようなリストにあなたのセットを変換するためにlist()を使用することができます。

with open(filename, 'w') as f: 
    for k, v in my_dict.items(): 
     f.write('{},{}\n'.format(k, list(v)[0])) 

編集:

0新しい入力で

は、それだけでこのような(key, value)ペアを書くためにあなたが必要とするすべてがあるようにも簡単になる:

my_dict = {'11': 0.5, '13': 1.0, '12': 0.5, -1: 3, '14': 0.0} 

with open(filename, 'w') as f: 
    for k, v in my_dict.items(): 
     f.write('{},{}\n'.format(k, v)) 
+0

これは 'my_dict'の値を変更します。 – niemmi

+0

@niemmiそうです、問題がある場合、OPは辞書 – ettanany

+0

をコピーできます:AttributeError: 'float'オブジェクトには属性 'pop'がありません。 –

0
import csv 

a={'1':{'0.9'}, '2':{'0.6'},'3':{'0.5'}} 
b = dict(zip(a.keys(), map(lambda x: next(iter(x)), a.values()))) 
with open('new_file','w') as f: 
    writer = csv.writer(f) 
    writer.writerows(b.items()) 
関連する問題