【问题标题】:How to append values to a python dictionary and return it in a function call如何将值附加到python字典并在函数调用中返回
【发布时间】:2019-06-04 16:21:30
【问题描述】:

我在执行多次的 python 函数调用中有一个 for 循环。我需要返回字典中的值以将它们转储到数据库中。

这是一段示例代码,我如何将值附加到字典并确保我拥有所有这些值以供进一步使用。

def parser_code():
    log = dict()
    for i in range(len):
        log['abc'] = 2*i
        log['xyz'] = 10+i
    return log

这将至少执行两次,所以我希望字典成为 log = {['abc':2, 'xyz':11],['abc':3, 'xyz':12]}

如何每次都附加到结果中?还是有更聪明的方法来做到这一点?

【问题讨论】:

  • 您的预期答案的语法很奇怪。您是否希望 log 成为列表类型,而不是字典?那么log = [{'abc':2, 'xyz':11},{'abc':3, 'xyz':12}]?
  • 可以是dict,我只是想把for循环的所有结果追加进去。
  • 问题是,字典在 Python 中不是这样工作的。您可以设置字典键的值,但“附加”不是字典的功能。
  • 为了更清楚地了解您想要在函数结果中拥有什么,也许可以解释一下您以后想用它做什么。然后有人可以为结果提供一个合适的数据结构的答案。
  • 我会将这些存储在 sqlite 数据库中。 “abc”和“xyz”实际上是与正在运行的服务器实例相关的信息,因此它们可以用于不同的服务器或只是在不同的时间段。

标签: python dictionary for-loop return


【解决方案1】:

您可以将字典作为参数提供给您的函数。

请不要说您的代码对我不起作用(for 循环的原始缩进 - 现在已更正)和 len 参数)。我需要猜测一下你实际上在做什么。您能否在此处查看问题或评论中的示例代码?

def parser_code(result, length):
   for i in range(length):
       result['abc'] = 2*i
       result['xyz'] = 10+i
   return result

d = {}
parser_code(d, 3)
print(d)
parser_code(d, 3)
print(d)

会给出这个输出:

python3 ./main.py 
{'abc': 4, 'xyz': 12}
{'abc': 4, 'xyz': 12}

【讨论】:

  • 我不确定这是否能回答他的问题。
  • 好的,所以它确实避免在每次调用时重置字典,但它仍然不是他们要求的结构
  • 是的,您每次都会使用现有的字典,而不是新的字典。
  • 感谢您的回复我一直在寻找一些不同的东西 - 每次都将值添加到同一个字典中,然后将它们全部返回。
【解决方案2】:

我认为您正在寻找 defaultdict 标准库的一部分。

from collections import defaultdict
glog = defaultdict(list)
def parser_code(dd):
    for i in range(length):
        dd['abc'].append(2*i)
    return dd

glog = parser_code(glog)

如果你真的想使用你的结果,你必须确保没有为每次调用你的函数创建新的字典。

你是否需要一个 dict 仍然有点不清楚,如果你想要 key-lookup 的能力,你只需要它。如果您对仅制作一个数字列表(数组)感到满意,那么请继续使用列表。

glog = list()
def parser_code(lst):
    return lst + [2*i for i in range(length)]
glog = parser_code(glog)

【讨论】:

  • 这正是他想要的,是的,而不是建立自己的自定义字典
  • 哇,谢谢。我不知道defaultdict,这对我的用例也很有帮助!
【解决方案3】:

我不能 100% 确定您期望什么行为,但我认为这段代码应该足够了:

def parser_code(length):
  log = list()
  for i in range(length):
    this_dict = dict()
    this_dict['abc'] = 2*i
    this_dict['xyz'] = 10+i
    log.append(this_dict)
  return log

【讨论】:

  • 是的,这很有效,非常感谢!我想我指的是这样的东西!
猜你喜欢
  • 1970-01-01
  • 2016-12-30
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-02
  • 2021-05-17
  • 2013-08-19
相关资源
最近更新 更多