Agregar un entero constante a un valor en un diccionario de python

¿Cómo agregaría un número constante, digamos 1, a un valor en un diccionario si se cumplen ciertas condiciones?

Por ejemplo, si tuviera un diccionario:

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

Si simplemente quisiera agregar el número entero 1 a cada valor en el diccionario para que se actualice dict como esto:

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

Cuando utilicé el siguiente código, donde Cur_FID es el primero en el diccionario ‘0’, ¿me dio un valor de 5? Debería haberme dado 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 

Quiero agregar 1 a todos los valores, pero paré aquí cuando la primera actualización del diccionario hizo algo extraño.

Una forma sencilla de hacer esto es usar un objeto de collections.Counter , que puede usar de todas las formas, como un diccionario normal en la mayoría de las formas, pero está optimizado para mantener un recuento de elementos:

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

En cuanto a hacerlo solo cuando se cumplen ciertas condiciones, solo use una comprensión o un generador para pasar solo la lista de las claves que desea incrementar a 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}) 

Otra forma de hacer esto sería utilizar el método de diccionario items () que devuelve una lista de tuplas de valor y clave:

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

A continuación, puede ampliar esto para tomar una función arbitraria:

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

Esto se puede proporcionar una función tal como:

 def is_greater_than_one(x): return x > 1 

y llamado de la siguiente manera:

 f(input_dictionary,is_greater_than_one) 

Su código dice lo siguiente:

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

Así que establecerá FID_thingy['0'] en 4, luego en 4, luego en 5 y luego en 5. ¿Ves por qué?