Adding a constant integer to a value in a python dictionary

前端 未结 3 1879
陌清茗
陌清茗 2021-01-15 17:55

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          


        
相关标签:
3条回答
  • 2021-01-15 18:22

    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)
    
    0 讨论(0)
  • 2021-01-15 18:31

    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})
    
    0 讨论(0)
  • 2021-01-15 18:32

    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?

    0 讨论(0)
提交回复
热议问题