【问题标题】:How can I return the entire dictionary?如何返回整个字典?
【发布时间】:2021-08-16 05:19:21
【问题描述】:

这是我的方法。我无法返回整个字典

def get_col(amount):
letter = 0
value = []
values = {}

for i in range(amount):
    letter = get_column_letter(i + 1)

    [value.append(row.value) for row in ws[letter]]

    values = dict(zip(letter, [value]))
    value = []
    
    return values

我希望它像这样输出:

{'A': ['ID', 'value is 1', 'value is 2', 'value is 3', 'value is 4', 'value is 5', 'value is 6']}
{'B': ['Name', 'value is 1', 'value is 2', 'value is 3', 'value is 4', 'value is 5', 'value is 6']}
{'C': ['Math', 'value is 1', 'value is 2', 'value is 3', 'value is 4', 'value is 5', 'value is 6']}

但是当 return 在 'for' 上时,它只会返回

{'A': ['ID', 'value is 1', 'value is 2', 'value is 3', 'value is 4', 'value is 5', 'value is 6']}

当返回在'for'循环之外时,它会返回

{'C': ['Math', 'value is 1', 'value is 2', 'value is 3', 'value is 4', 'value is 5', 'value is 6']}

任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 请编辑您问题中的代码,使其成为minimal reproducible example - 包括一些显示代码输出问题的最小数据。
  • 您在每次迭代时都会覆盖字典 values - 尝试更新字典:stackoverflow.com/a/577241/2711811values.update(dict(zip(letter,[value]))) 并返回“外部”循环。
  • 使用ws.iter_cols() 来做到这一点要容易得多

标签: python dictionary openpyxl


【解决方案1】:

您想要的输出不是单个字典。这是一个字典列表。 在 for 循环中,每次迭代都会创建一个新字典。返回时,您可以返回您创建的第一个或最后一个(如果您将返回分别放在内部或外部)。

您需要返回已创建字典的列表

def get_col(amount):
    letter = 0
    value = []
    values = {}
    
    values_list = []
    
    for i in range(amount):
        letter = get_column_letter(i + 1)

        [value.append(row.value) for row in ws[letter]]

        values = dict(zip(letter, [value]))
        value = []
        
        values_list.append(values)
        
    return values_list

【讨论】:

    【解决方案2】:

    我假设你想要一个字典中的所有数据:

    values = dict(zip(letter, [value]))

    目前,您的这部分代码每次都会覆盖字典。这就是为什么在 for 循环结束之前返回“A”字典,以及为什么在循环结束后返回字典只是“C”字典,因为“A”和“B”被覆盖了。

    之后将 return 放在 for 循环之外,而不是

    values = dict(zip(letter, [value]))

    使用

    values[letter] = value

    因为这会将更多的键/值附加到字典。

    ps。这是我的第一篇文章,希望对您有所帮助并且可以理解。

    编辑:如果您想要一个包含三个字典的列表,例如您想要的输出显示,请执行以下操作:

    def get_col(amount):
      letter = 0
      value = []
      values = []
    
      for i in range(amount):
        letter = get_column_letter(i + 1)
    
        [value.append(row.value) for row in ws[letter]]
    
        values.append(dict(zip(letter, [value])))
        value = []
        
      return values
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多