字典不会使用“for”循环填充

2024-05-14 05:38:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图写一个程序,接收有关交换机的数据行。到目前为止,我已经将数据分为几行,以便每行包含一个ip、max和total。这些都可以在字典中很好地填充,但是我注意到每次迭代下面的字典结构时,都会覆盖字典。我想把多个词条加到一本字典里。你知道吗

for line in lines:
    switch_ip = buildings[build_pre]
    total = int(line.split(';')[3])
    MAX = int(line.split(';')[4])
    if switch_ip not in data:
        data = { buildings[build_pre]:
                   { switch_ip:
                       { 'max': MAX,
                         'total':total
                       }
                   }
               }

当前data的输出是:

{'Azalea': {'Azalea': {'max': 14, 'total': 56}}}

但是,我希望输出看起来更像:

{'Azalea': {'Azalea': {'max': 14, 'total': 56}},
 'Traditions': {'Traditions': {'max': 13, 'total': 20}}}

Tags: 数据inbuildipdata字典linepre
3条回答

你在每个循环中重新定义字典。相反,您需要定义一次字典,然后在每个循环中附加到字典。你知道吗

data = {}

for line in lines:
  switch_ip = buildings[build_pre]
  total = int(line.split(';')[3])
  MAX = int(line.split(';')[4])
  if switch_ip not in data:
    data[buildings[build_pre]] = {
      switch_ip: {
        'max': MAX,
        'total':total
      }
    }

这样,您就可以在每次迭代时为字典添加一个键,而不是试图构建一个全新的字典。你知道吗

您的代码可以重写如下:

for line in lines:
    switch_ip = buildings[build_pre]
    t = line.split(';')
    total, max_ = int(t[3]), int(t[4])
    data.setdefault(switch_ip, {
        switch_ip: {'max': max_, 'total': total}
    })

默认情况下,Python将变量称为本地变量。它可以添加到本地data字典,因此可以尝试在for循环之前的一行中定义global data。你知道吗

但是,这取决于您使用它的方式和地点。你知道吗

相关问题 更多 >