将常量整数添加到python字典中的值

时间:2012-03-08 19:47:09

标签: python dictionary

如果满足某些条件,如何在字典中为值添加常数(例如1)。

例如,如果我有一本字典:

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

如果我只是想将整数1添加到字典中的每个值,那么它会更新dict:

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

当我使用下面的代码,其中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,但是当第一个字典更新做了一些奇怪的事情时停在这里。

3 个答案:

答案 0 :(得分:3)

一种简单的方法是使用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})

答案 1 :(得分:1)

另一种方法是使用dictionary的items()方法返回一个键值元组列表:

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 f(dict, func):
    for entry in dict.items():
        if func(entry[1]):
            dict[entry[0]] = entry[1] + 1
    return dict

这可以提供如下功能:

def is_greater_than_one(x):
    return x > 1

并以下列方式呼叫:

f(input_dictionary,is_greater_than_one)

答案 2 :(得分:0)

您的代码说明如下:

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

所以它会将FID_thingy['0']设置为4然后是4然后是5然后是5然后5.你明白为什么吗?