2016-10-13 7 views
0

私はループしている辞書を持っています。私は値==特定の数(この場合は0)の場合、forループの次の反復の値は2倍の値になると言いたいと思います。forループの次の繰り返しにアクセスする方法

Iは、以下のように辞書を持っている:

d = {'a' : 1, 'b' : 0, 'c' : 4} 

場合Iループ私は現在の反復が= 0

場合2によって次の反復を乗算したいforループを有する辞書を介して
for k, v in d.items(): 
    if k == 0: 
     [next iteration v = v * 2] 
    else: 
     v = v + 1 

だから私はこのような辞書で終わることを期待する:

d = {'a' : 2, 'b' : 0, 'c' : 9} 

これがjであります単純な例ですが、私が達成しようとしていることをうまく説明してください。

ありがとうございます。

+4

問題は、辞書を使用していて、順序を保持していないため、実行ごとに異なる値が得られる可能性が高いということです。 – Lafexlos

+0

私はこれを達成する別の方法を知っていますか? –

答えて

2

orderedDictを使用して辞書を作成し、注文を保つことができます。

アルゴリズムを見ると、ゼロでない場合はすべての値に1を加え、ゼロの場合は最初に次の項目を乗算して1を加算します。基本的で最も簡単な方法の1つは、次の価値を掛けるべきかどうかを決定するフラグを持つことです。

import collections 

d = (("a", 1), ("b", 0), ("c", 4)) 
od = collections.OrderedDict(d) 

multiply = False 
for k in od.keys(): 
    if multiply: 
     od[k] *= 2 
    if od[k] != 0: 
     od[k] += 1 
     multiply = False 
    else: 
     multiply = True 

print(od) 
0

残念ながら、辞書は辞書を使用していません。あなたはリストなどの何かを使用することができません。あなたがキー/値のペアをリストに設定することは確実ではありません。

関連する問題