Python dict循环外问题

问题描述

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

我已经将dict设置为value,对于每个prop值,我都将尊重的yaml文件添加到set中,所以dict会像这样循环:

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

我正在循环中填充dict,但是一旦完成所有yaml文件的读取,然后从外循环返回dict就会始终将其返回为空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]
                 break
            for prop in prop_list:
               records_map[prop].add(f_name)
    return records_map

任何人都可以帮助我找出以上代码的问题吗?

解决方法

我设法修复了它,它在列表上抛出了空指针异常,并且由于此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