2012-03-08 9 views
1

特定の条件が満たされている場合、どのようにしてディクショナリの値に定数1を追加しますか?例えばPython辞書の値に定数を追加する

、私は辞書があった場合:とき

dict = {'0':4, '1':4, '2':5, '3':5, '4':5} 

:私は単にそれがこのよう辞書を更新しますので、辞書内のすべての値に整数1を追加したい場合は

dict = {'0':3, '1':3, '2':4, '3':4, '4':4} 

を私はCur_FIDが辞書 '0'の最初のもので、5の値を与えた次のコードを使用しましたか?それは私に4を与えているはずです。

for lucodes in gridList2: # a list of the values [3,3,4,4,4] -- have to separate out because it's part of a larger nested list 
    if lucodes > 1: 
     if lucodes < 5: 
      FID_GC_dict[Cur_FID] = lucodes + 1 

print FID_GC_dict[Cur_FID] #returned 5??? weird 

すべての値に1を追加したいのですが、最初の辞書の更新が何か変わったときにここで停止しました。

+1

あなたはyoを書くことができますur比較は 'if 1 katrielalex

+0

ありがとう...私はそれを短縮します。 – Linda

+0

私はあなたが 'Cur_FID'を設定/変更する場所に関するコードを投稿する必要があると思います。私は 'FID_GC_dict'のアップデートで2回使用されていると感じています。 – inspectorG4dget

答えて

3

1つの簡単な方法は、あなたが最も通りの方法で、通常の辞書のようにあらゆる方法で使用することができますcollections.Counterオブジェクトを使用することですが、それは、アイテムの数を維持するために最適化されています

>>> from collections import Counter 
>>> d = Counter({'0':3, '1':3, '2':4, '3':4, '4':4}) 
>>> d 
Counter({'3': 4, '2': 4, '4': 4, '1': 3, '0': 3}) 
>>> d.update(d.keys()) 
>>> d 
Counter({'3': 5, '2': 5, '4': 5, '1': 4, '0': 4}) 

として、一定の条件が満たされたときにのみ、それを行うために、ただあなただけはd.update()にインクリメントしたいキーのリストを渡すために理解や発電機を使用します。

>>> d = Counter({'3': 4, '2': 4, '4': 4, '1': 3, '0': 3}) 
>>> d.update((k for k, v in d.items() if v == 4)) 
>>> d 
Counter({'3': 5, '2': 5, '4': 5, '1': 3, '0': 3}) 
+0

賢い...非常に良い!ご協力いただきありがとうございます。 – Linda

+0

+1カウンターの素敵な使用! – katrielalex

+0

しかし、辞書が巨大で、私はキーを更新したいだけです:gridList2にリストされているものの値?私はそれをどのように扱うだろうか? – Linda

0

あなたのコードは、次の言葉:

for each value in [3,3,4,4,4]: 
    if 1 < value < 5: 
     FID_thingy['0'] = value + 1 

だから、FID_thingy['0'] 5.その後、5、その後5その後、4その後、4に設定されます、あなたは、なぜ参照していますか?これを行うには

+0

これは、リスト内の各値を1つのFID_thingyキーだけ通過するためです。私はそれを得る...どのようにそれを修正するか分からない。 – Linda

1

これを行うための別の方法は、(アイテムを使用することです)retの辞書のメソッド壷キーのリストを、値のタプル:

def f(dict): 
    for entry in dict.items(): 
     if entry[1] > 1 and entry[1] < 5: 
      dict[entry[0]] = entry[1] + 1 
    return dict 

その後、任意の関数を取るために、これを拡張することができます。

def is_greater_than_one(x): 
    return x > 1 

def f(dict, func): 
    for entry in dict.items(): 
     if func(entry[1]): 
      dict[entry[0]] = entry[1] + 1 
    return dict 

これは、次のような機能を提供することができます

f(input_dictionary,is_greater_than_one) 
+0

本当にありがとうございます。私はそれをあまりに簡単に尋ねたと思いますか?辞書が非常に大きく、gridList2を処理するときに満たされた条件に基づいて、辞書内の4つの項目を更新したいだけでしたか?私は辞書内のすべてのアイテムを更新したくない、ちょうど少数のアイテムを更新したい。私は私の最初の質問をするのがはっきりしていないことを知っています。助けてくれてありがとう。 – Linda

関連する問題