首页 > 解决方案 > 循环外的Python dict问题

问题描述

我正在使用 yaml 文件读取pyyaml并查找 yaml 文件中的特定属性,并在列表中获取它的所有值。

我将 dict 设置为值,并且对于每个道具值,我将尊重 yaml 文件添加到 set 中,因此 dict 会像这样循环:

prop1 => yaml1 , yaml2 , prop2 => yaml3 , prop3 => yaml4, yaml1 etc...

我在循环内填充字典,但是一旦所有 yaml 文件读取完成,然后从外循环返回字典总是返回空字典。

代码片段:

  def populate_records():
    records_map = defaultdict(set)
    path = 'abc/xyz'
    pattern = '*.yaml'
    prop_key = "abc::def"
    files = glob.glob(path + os.sep + pattern)
    for filename in files:
       f_name = os.path.basename(filename).rsplit(".", 1)[0]
       with open(filename, 'r') as f:
          node = yaml.load(f)
          if node is not None:
            for property_name in node:
               if prop_key == property_name:
                 prop_list = node[property_name]
                 break
            for prop in prop_list:
               records_map[prop].add(f_name)
    return records_map

谁能帮我弄清楚上面的代码有什么问题?

标签: pythondictionary

解决方案


我已经设法修复它,它在列表上抛出空指针异常,并且由于这个 dict 总是返回为空。

工作代码:

def populate_records():
records_map = defaultdict(set)
path = 'abc/xyz'
pattern = '*.yaml'
prop_key = "abc::def"
files = glob.glob(path + os.sep + pattern)
for filename in files:
   f_name = os.path.basename(filename).rsplit(".", 1)[0]
   with open(filename, 'r') as f:
      node = yaml.load(f)
      if node is not None:
        for property_name in node:
           if prop_key == property_name:
             prop_list = node[property_name]
             if prop_list is None:
                break
             for prop in prop_list:
                records_map[prop].add(f_name)
                break 
return records_map

推荐阅读