2017-12-06 12 views
0

私はこのコードを使用して、辞書の項目をdoc変数に格納します。 このコードは正常に動作しますが、if文のために最初の要素が失われます。私はドキュメントを印刷するときIf文の辞書の1つの要素がありません

def convert(old): 
    time_key = 'Time ' 
    # Save the time 
    time_item = (time_key, old[time_key]) 
    # Add remove it 
    del old[time_key] 
    # Copy remaining items to new dicts and save them in a list 
    return [dict([time_item, item]) for item in old.items()] 

row = { 
    'Time ': '2017-12-01T13:54:04', 
    'Energy [kWh]': '0.01', 
    'Voltage [V]': '221.64', 
    'Current [A]': '0.08', 
} 

new_data = convert(row) 
#print(new_data) 
Zeitvalue= "" 
Device="" 
Value="" 
for d in new_data: 
    #print(d) 
    for key, value in d.items(): 
     if key == 'Time ': 
      Zeitvalue = value 
      #print(value) 
      continue 
     else: 
      Device = key 
      Value = value 
     doc = {'Time ':Zeitvalue,'Device':Device, 'Measure':Value} 
     print("This is doc variable:",doc) # doc vaiable with missed time element 

は、だから私はこの 出力を得た:

doc:  {'Device': 'Voltage [V]', 'Measure': '221.64', 'Time ': ''} # **ISSUE: variable time is missed here, How to fix it ?** 
    doc:  {'Device': 'Current [A]', 'Measure': '0.08', 'Time ': '2017-12-01T13:54:04'} 
    doc:  {'Device': 'Energy [kWh]', 'Measure': '0.01', 'Time ': '2017-12-01T13:54:04'} 
+0

出力を担当する印刷ラインのコメントを外してください。 –

+0

"continue"ステートメントのために可能です – caot

+0

'ifkey == 'Time'条件から' continue'を削除します。注意しておきますが、他のすべてのエントリには継承された 'Zeitvalue'があるので、' Time'が各エントリのセットに対して発生しない場合、次のセットは前のセットの時間を持ちます。 – zwer

答えて

0

は、コード内で以下の変更を参照してください。継続文を削除します。ディクショナリの内部ループが終了した後で、3つの値がすべて必要な場合は、docに値を割り当てます。

for d in new_data: 
#print(d) 
    for key, value in d.items(): 
     if key == 'Time ': 
      Zeitvalue = value 
      #print(value) 

     else: 
      Device = key 
      Value = value 

    doc = {'Time ':Zeitvalue,'Device':Device, 'Measure':Value} 
    print(doc) 
0

あなたはちょうどあなたがこの行の問題持ってforループ

for d in new_data: 

    for key, value in d.items(): 
     if key == 'Time ': 
      Zeitvalue = value 
      continue 
     else: 
      Device = key 
      Value = value 
    doc = {'Time ':Zeitvalue,'Device':Device, 'Measure':Value} 
0

外のドキュメントの割り当てを置き、値を設定している場合:あなたがのためにループ内でそれを使用する場合

doc = {'Time ':Zeitvalue,'Device':Device, 'Measure':Value}を!辞書がオーダーデータ構造ではないため、予期しない動作が発生します。つまり、 "tine"キーが最初に出会った場合、うまく動作しますが、最初に 'time'に遭遇しなかった場合、その値はその値に初期化してから更新していないので、まだ== ""です。

doc = {'Time ':Zeitvalue,'Device':Device, 'Measure':Value}を外側のループに移動して、それぞれのキーと値を超えるループではなく、うまくいくでしょう。

+0

助言。私はそれをした – AhmyOhlin

+1

あなたの問題を解決した場合は、してくださいupvote – ddor254

関連する問題