【问题标题】:Python create nested dict in for loop [closed]Python在for循环中创建嵌套字典[关闭]
【发布时间】:2020-06-14 20:42:10
【问题描述】:

我正在尝试创建一个嵌套字典,但我在 for 循环中遇到了问题,至少我是这么想的。 我根据传递的 args 做了几个请求,但是当我尝试向嵌套的 dict 添加值时,它只是添加了最后一个传递的 arg。 我将显示代码和输出。

def api_metrics():
    my_list = []
    my_dict_1 = {}
    number = len(my_metrics)
    metricz = range(number)
    for indice in metricz:
        my_dict_1[indice] = {}
    for metric in my_metrics:
        urlnotoken = ""
        urlnotoken = urlnotoken.replace(" ","%20")
        preurl = urlnotoken + "&dateToken="+expirationDate
        msg = preurl + apikey
        token = calcMd5(msg)
        finalurl = "http://"+host+preurl+"&token="+token
        data_get = requests.get(finalurl, headers=app_headers)
        json_data = json.loads(data_get.text)
        metrics_path = json_data['data'][0]['metrics'][0]
        metric_name = metrics_path['label']
        metric_value = metrics_path['values'][0]['data'][0][1]
        metric_unit = metrics_path['magnitudes']['y']
        my_list.append(metric_name)
        my_list.append(metric_value)
        my_list.append(metric_unit)
        number = len(my_metrics)
        metricz = range(number)
        my_values = metric
        for entry in my_dict_1.keys():
          my_dict_1[entry] = metric
    return(my_dict_1)

还有输出

{0: 'avgRenditionSwitchTime', 1: 'avgRenditionSwitchTime', 2: 'avgRenditionSwitchTime', 3: 'avgRenditionSwitchTime', 4: 'avgRenditionSwitchTime'}"

这应该输出传递的不同参数。我已经在循环内外移动了代码,我已经阅读了很多帖子,但我需要进一步的帮助!

干杯。

【问题讨论】:

  • 您可以先从阅读列表和字典理解中受益。也请坚持缩进级别 - 这被标记为 python 而不是 java - 所以缩进很重要
  • 我已经阅读了,但仍然没有成功。关于缩进,我只是看到一个不正常的地方,它在这里重新排列,所以它可能已经逃脱了,而且它确实是 python,现在你真的可以帮忙吗?现在看来很确定了。
  • 你应该首先摆脱这个:对于 metricz 中的索引:my_dict_1[indice] = {} 使用枚举,使用理解;这将有助于清理您的代码
  • 谢谢,去看看
  • 修复您的代码缩进,因为它会引起您和其他人的混淆。也尝试改进您的问题。

标签: python loops dictionary nested


【解决方案1】:

在这里:

for entry in my_dict_1.keys():
    my_dict_1[entry] = metric

您正在将 metric 的值分配给您的所有 dict (my_dict_1) 项目。 '它只是添加最后一个传递的参数'的原因。

无需清理您的代码,以下是修复您问题的补丁:

for i, metric in enumerate(my_metrics):
    ...
    my_dict_1[i] = metric

【讨论】:

  • 但是度量值是传递的参数,如果我执行 print(metric) 它会打印所有内容。我知道问题出在我身上,但我很难理解
  • 随着传入的每个参数,您将遍历 dict 并将相同的 arg 值重新分配给所有 dict 元素。
  • 我明白你在说什么,很好。你能给我一些关于搜索什么以完成我想要做的事情的提示吗?
  • 谢谢!我没有期待正确的答案,我正在寻找提示,你的和 drakos 帮了我很多。我刚刚搜索了一些关于字典理解和枚举的文章!
猜你喜欢
  • 2021-12-03
  • 2020-11-02
  • 2021-07-25
  • 2019-03-29
  • 2022-01-03
  • 2017-01-03
  • 2019-09-30
  • 2020-09-13
  • 1970-01-01
相关资源
最近更新 更多