【问题标题】:Concatenate iterator to variable name将迭代器连接到变量名
【发布时间】:2020-12-01 18:49:10
【问题描述】:

我想调用一个名称中带有数字的变量。我认为我最接近的是将迭代器连接到名称上,并将其转换为字典,但它不起作用。

这是我尝试过的:

dict0 = {"pet1":"dog", "pet2":"cat", "pet0":"bird"}
dict1 = {"first":"a", "second":"b", "third":"c"}
dict2 = {"num1":1,"num2":2,"num3":3}

for i in range(3):
    tempDict = "dict"+str(i) # type is string
    print(dict(tempDict))

output: ValueError: dictionary update sequence element #0 has length 1; 2 is required

这些字典正在使用数据库调用填充,表编号为 0,1,2...n。有时我有一本字典,有时我有多个。如果可能的话,能够调用它们并迭代地处理内容将非常方便。我不知道该用什么谷歌来寻找答案,提前谢谢你。

【问题讨论】:

  • "我想调用一个名称中带有数字的变量。" - 不。使用列表。
  • 为什么不只是for tempDict in [dict0, dict1, dict2]:
  • 每当您有一个变量列表(例如编号为 0、1、2、...、n 的表)并且您想创建变量,例如 dict0、dict1、dict2 等. 想象一下n 非常大,就像一百万一样。你会创建 100 万个名为 dict0、dict1、...、dict999999 的变量吗?不,你不会。这就是你知道你需要使用其他东西的方式,这通常是一个列表(如果你可以按数字和顺序索引)或字典(否则)。
  • @jarmod 这是一个绝妙的表达方式。

标签: python variable-types


【解决方案1】:

假设您创建了具有正确名称的变量(在本例中为 dict0, dict1, dict2),您可以使用 vars() 方法通过它们的名称获取值

dict0 = {"pet1":"dog", "pet2":"cat", "pet0":"bird"}
dict1 = {"first":"a", "second":"b", "third":"c"}
dict2 = {"num1":1,"num2":2,"num3":3}

for i in range(3):
    print(vars()[f"dict{i}"])

这会按预期打印每个字典

【讨论】:

    【解决方案2】:

    如果你想通过变量名访问字典,试试这个:

    dict0 = {"pet1":"dog", "pet2":"cat", "pet0":"bird"}
    dict1 = {"first":"a", "second":"b", "third":"c"}
    dict2 = {"num1":1,"num2":2,"num3":3}
    
    for i in range(3):
        dict_var_name = "dict"+str(i) # type is string
        print(globals()[dict_var_name])
    

    globals() 返回包含全局范围内所有已定义变量的字典。有关这方面的更多信息,请查看question

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-21
      • 2010-10-19
      • 1970-01-01
      • 2018-01-09
      • 1970-01-01
      • 2017-08-29
      • 2023-03-05
      相关资源
      最近更新 更多