How would you add a constant number, say 1, to a value in a dictionary if certain conditions are fulfilled.
For example, if I had a dictionary:
dict
Another way of doing this would be to use the items() method of dictionary which returns a list of key, value tuples:
def f(dict):
for entry in dict.items():
if entry[1] > 1 and entry[1] < 5:
dict[entry[0]] = entry[1] + 1
return dict
You can then extend this to take an arbitrary function:
def f(dict, func):
for entry in dict.items():
if func(entry[1]):
dict[entry[0]] = entry[1] + 1
return dict
This can be provided a function such as:
def is_greater_than_one(x):
return x > 1
and called in the following way:
f(input_dictionary,is_greater_than_one)
One simple way to do this is to use a collections.Counter object, which you can use in every way like a normal dictionary in most ways but it is optimized for keeping a count of items:
>>> 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})
As for only doing it when certain conditions are fulfilled, just use a comprehension or generator to only pass the list of the keys you want to increment to 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})
Your code says the following:
for each value in [3,3,4,4,4]:
if 1 < value < 5:
FID_thingy['0'] = value + 1
So it will set FID_thingy['0']
to 4 then 4 then 5 then 5 then 5. Do you see why?