【问题标题】:Modify Values in a Dictionary While Iterating Through It [closed]在迭代字典时修改字典中的值[关闭]
【发布时间】:2023-04-06 13:14:02
【问题描述】:

我已经初始化了一个形式的字典:

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

我想通过它迭代地传递一个值 1(这样每个键的值都为 1,按升序排列,而所有其他键的值为 0)。

我的目标是在每次迭代中使用这个字典作为输入来运行一个算法。

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

【问题讨论】:

    标签: python loops for-loop iteration


    【解决方案1】:

    这将从键 1 开始,并将其值更改为 1。然后它会去key2将其值更改为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
    

    【讨论】:

    • 感谢您的回答,它有效!我只是想找到更像python的东西
    【解决方案2】:

    据我了解:

    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)
    

    loopprintstatement 的输出:

    {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}
    

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

    【讨论】:

    • 鉴于这只是一个带有整数值的简单字典,我想sample_dict.copy() 就足够了吗?
    • 我不知道有一个方法 .copy() 。谢谢你!
    【解决方案3】:

    您可以编写一个生成器来跟踪上次使用的键和当前键,并在每次更改时生成字典

    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
    

    【讨论】:

    • 我不能很好地遵循你的代码。我会进一步检查并回复你。谢谢你的回答
    【解决方案4】:

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

    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
    

    【讨论】:

    • Shuffle 重新组织了我的字典。我只是希望它按升序更改。不是随机的
    猜你喜欢
    • 1970-01-01
    • 2021-07-01
    • 2013-02-22
    • 2011-10-10
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    相关资源
    最近更新 更多