遍历字典时修改字典中的值

时间:2020-06-13 20:23:32

标签: python loops for-loop iteration

我已经初始化了以下形式的字典:

{1: 0,
 2: 0, 
 3: 0,
 .
 . 
 .
 98: 0,
 99: 0,
 100:0}

我想迭代地传递值1(以便每个键的值都按升序排列为1,而其他所有键的值都为0)。

我的目标是在每次迭代中以该字典作为输入来运行算法。

我如何在python中做到这一点?

4 个答案:

答案 0 :(得分:2)

这将从键1开始并将其值更改为1。然后它将转到键2,将其值更改为1,并将键1的值更改回0,依此类推。

d = {i:0 for i in range(1, 101)}

for i in range(1, 101):
  d[i]=1
  if i>1:
    d[i-1]=0

答案 1 :(得分:1)

您可以编写一个生成器,以跟踪上次使用的密钥和当前密钥,并根据每次更改生成命令。

def dict_sequencer(orig):
    keys = sorted(orig.keys(),reverse=True)
    key0 = keys.pop()
    orig[key0] = 1
    yield orig
    for _ in range(len(keys)):      
        key1 = keys.pop()
        orig[key0] = 0
        orig[key1] = 1
        yield orig
        key0 = key1

答案 2 :(得分:1)

据我了解:

import copy

sample_dict = {1: 0, 2: 0, 3: 0, 4: 0, 5: 0}


for k, v in sample_dict.items():
  sample_dict_loop = sample_dict.copy()
  sample_dict_loop[k] = 1
  print(sample_dict_loop)

printloop语句的输出:

{1: 1, 2: 0, 3: 0, 4: 0, 5: 0}
{1: 0, 2: 1, 3: 0, 4: 0, 5: 0}
{1: 0, 2: 0, 3: 1, 4: 0, 5: 0}
{1: 0, 2: 0, 3: 0, 4: 1, 5: 0}
{1: 0, 2: 0, 3: 0, 4: 0, 5: 1}

注意:我给出的逻辑是在dict中创建一个新的loop

答案 3 :(得分:1)

要初始化一个只有零的字典:

d = {i: 0 for i in range(1, 101)}

如果您要接受此字典并将其元素之一随机设置为1,则可以执行以下操作:

import random

d[random.choice(list(d.keys()))] = 1

如果您想依次执行每个操作,但仍以随机顺序进行,则可以获取键列表,然后shuffle进行操作:

keys = list(d.keys())
random.shuffle(keys)
for key in keys:
    d[key] = 1