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

时间:2018-06-15 01:42:21

标签: python loops dictionary

我正在尝试编写一个程序,该程序接收有关交换机的数据。到目前为止,我已将数据拆分为每行包含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}}}

3 个答案:

答案 0 :(得分:2)

你正在重新定义每个循环中的字典。相反,您希望将字典定义一次,然后附加到每个循环内的字典中。

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
      }
    }

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

答案 1 :(得分:0)

您的代码cat可以重写如下:

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}
    })

答案 2 :(得分:-2)

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

但是,这取决于您使用它的方式和位置。