我已经初始化了以下形式的字典:
{1: 0,
2: 0,
3: 0,
.
.
.
98: 0,
99: 0,
100:0}
我想迭代地传递值1(以便每个键的值都按升序排列为1,而其他所有键的值都为0)。
我的目标是在每次迭代中以该字典作为输入来运行算法。
我如何在python中做到这一点?
答案 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)
print
中loop
语句的输出:
{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