python迭代数组并访问字典

时间:2018-01-15 13:23:00

标签: python arrays loops dictionary

我有一个由数字及其值组成的字典

dict = {1:5, 2:5, 3:5}

我有一个带有一些数字的数组

arr = [1,2]

我想做的是:

遍历dict和数组 如果字典值等于数组中的数字,则将字典值设置为零 字典中与其匹配的数组中没有值的任何值,加1

所以在上面的例子中,我最终应该

arr = [1,2]
dict = {1:0, 2:0, 3:6}

我所困扰的是从数组值创建变量并访问字典中的特定数字 - 例如使用dict[i]

4 个答案:

答案 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作为变量