Hinzufügen einer konstanten Integer zu einem Wert in einem Python-Wörterbuch

Wie würden Sie eine konstante Zahl hinzufügen, sagen Sie 1, auf einen Wert in einem Wörterbuch, wenn bestimmte Bedingungen erfüllt sind.

Zum Beispiel, wenn ich ein Wörterbuch hatte:

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

Wenn ich einfach die Ganzzahl 1 zu jedem Wert in das Wörterbuch hinzufügen möchte, so dass es dict als dies aktualisiert:

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

Als ich den folgenden Code verwendete, wo die Cur_FID die erste im Wörterbuch '0' ist, gab es mir einen Wert von 5? Es hätte mir geben sollen 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 

Ich möchte 1 zu allen Werten hinzufügen, aber hielt hier an, als das erste Wörterbuch-Update etwas seltsames machte.

3 Solutions collect form web for “Hinzufügen einer konstanten Integer zu einem Wert in einem Python-Wörterbuch”

Ein einfacher Weg, dies zu tun ist, um eine collections.Counter Objekt, das Sie in jeder Hinsicht wie ein normales Wörterbuch in den meisten Fällen verwenden können, aber es ist optimiert für die Beibehaltung einer Anzahl von Elementen:

 >>> 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}) 

Wenn Sie es nur tun, wenn bestimmte Bedingungen erfüllt sind, verwenden Sie einfach ein Verständnis oder einen Generator, um nur die Liste der Schlüssel zu übergeben, die Sie in d.update() möchten:

 >>> 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}) 

Eine andere Möglichkeit, dies zu tun, wäre, die Items () -Methode des Wörterbuchs zu verwenden, die eine Liste von Schlüssel-Wert-Tupeln zurückgibt:

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

Sie können dann diese erweitern, um eine beliebige Funktion zu nehmen:

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

Dies kann eine Funktion wie:

 def is_greater_than_one(x): return x > 1 

Und rief folgendes an:

 f(input_dictionary,is_greater_than_one) 

Dein Code sagt folgendes:

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

So wird es FID_thingy['0'] auf 4 dann 4 dann 5 dann 5 dann 5. sehen Sie warum?

Python ist die beste Programmiersprache der Welt.