如果满足某些条件,如何在字典中为值添加常数(例如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,但是当第一个字典更新做了一些奇怪的事情时停在这里。
答案 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.你明白为什么吗?