我有一个由数字及其值组成的字典
dict = {1:5, 2:5, 3:5}
我有一个带有一些数字的数组
arr = [1,2]
我想做的是:
遍历dict和数组 如果字典值等于数组中的数字,则将字典值设置为零 字典中与其匹配的数组中没有值的任何值,加1
所以在上面的例子中,我最终应该
arr = [1,2]
dict = {1:0, 2:0, 3:6}
我所困扰的是从数组值创建变量并访问字典中的特定数字 - 例如使用dict[i]
答案 0 :(得分:1)
您只需要一个dict-comprehension
,它会为值部分重新构建一个if
条件的词典。
my_dict = {1:5, 2:5, 3:5}
arr = [1,2]
my_dict = {k: (0 if k in arr else v+1) for k, v in my_dict.items()}
print(my_dict) # {1: 0, 2: 0, 3: 6}
请注意,我已将字典从dict
重新命名为my_dict
。这是因为通过使用dict
,您将覆盖名为dict
的Python内置函数。你不想这样做。
答案 1 :(得分:1)
arr = [1,2]
data = {1:0, 2:0, 3:6} # don't call it dict because it shadow build-in class
unique = set(arr) # speed up search in case if arr is big
# readable
for k, v in data.items():
if k in unique:
data[k] = 0
else:
data[k] += 1
# oneliner
data = {k: (0 if k in unique else v + 1) for v, k in data.items()}
附加示例:
for a, b, c in [(1,2,3), (4,5,6)]:
print('-',a,b,c)
# will print:
# - 1 2 3
# - 4 5 6
答案 2 :(得分:0)
他们总是dict(map())
方法,它使用每个键的新值重建一个新词典:
>>> d = {1:5, 2:5, 3:5}
>>> arr = {1, 2}
>>> dict(map(lambda x: (x[0], 0) if x[0] in arr else (x[0], x[1]+1), d.items()))
{1: 0, 2: 0, 3: 6}
这是有效的,因为包装dict()
会自动将映射的2元组转换为字典。
此外,您不应将dict
用作变量名称,因为它会影响内置dict
。
答案 3 :(得分:0)
只需使用.update方法:
dict_1 = {1:5, 2:5, 3:5}
arr = [1,2]
for i in dict_1:
if i in arr:
dict_1.update({i:0})
else:
dict_1.update({i:dict_1.get(i)+1})
print(dict_1)
输出:
{1: 0, 2: 0, 3: 6}
P.S:不要使用dict作为变量