【问题标题】:Add to dictionary with an f-string inside a for loop在 for 循环中使用 f 字符串添加到字典
【发布时间】:2019-11-25 23:26:13
【问题描述】:

我目前正在尝试做一些非常相似的事情:

for letter in ['a', 'b', 'c']: 
    key1 = f'{letter}_1' 
    key2 = f'{letter}_2' 
    numbers = { 
        key1: 1, 
        key2: 2 
    }

我希望numbers 是:{'a_1': 1, 'a_2': 2, 'b_1': 1, 'b_2': 2, 'c_1': 1, 'c_2': 2}。相反,我得到:{'c_1': 1, 'c_2': 2}

我该如何生产前者?

【问题讨论】:

  • 您正在循环中重新初始化字典。您需要在循环之外声明字典,然后向其中添加值

标签: python python-3.x loops dictionary f-string


【解决方案1】:

我认为问题在于您没有在 for 循环之前初始化字典。

numbers = {}


for letter in ['a', 'b', 'c']:
    key1 = f'{letter}_1'
    key2 = f'{letter}_2'
    numbers.update ({
        key1: 1,
        key2: 2
    })

print(numbers)

【讨论】:

  • 啊,就是这样。我之前尝试过初始化,但这并不能自行解决。 numbers.update 是我丢失的关键。谢谢!
【解决方案2】:

你可以尝试做这样的事情

numbers = {}
for letter in ['a', 'b', 'c']:
    key1 = f'{letter}_1' 
    key2 = f'{letter}_2' 
    numbers.update({ 
        key1: 1, 
        key2: 2 
    })

您需要在 for 循环之外初始化您的字典。在您的代码中,每次迭代都会创建一个新字典。

【讨论】:

    【解决方案3】:

    您正在每个循环创建一个新对象。

    numbers = {}
    
    for letter in ['a', 'b', 'c']: 
        key1 = f'{letter}_1' 
        key2 = f'{letter}_2' 
        numbers.update({ 
            key1: 1, 
            key2: 2 
        })
    

    【讨论】:

      【解决方案4】:

      如果需要,您可以使用 dict 理解构建它:

      mydict = {f'{x}_{str(y)}':y for x in ['a','b','c'] for y in (1,2)}
      

      这给出了:

      {'a_1': 1, 'a_2': 2, 'b_1': 1, 'b_2': 2, 'c_1': 1, 'c_2': 2}
      

      读起来有点难,但还不错。

      【讨论】:

      • 这是一个不错的单行。不幸的是,我的实际使用在循环中有一些额外的步骤,这会将其炸毁到完全不可读的领域。
      猜你喜欢
      • 2017-08-23
      • 1970-01-01
      • 2012-06-16
      • 2014-06-05
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-14
      相关资源
      最近更新 更多