从python中无法访问的函数返回的字典

时间:2014-01-17 17:13:40

标签: python dictionary

看起来很简单,但我认为对象超出了范围! 我有一个构造字典的函数 -

     def fill_dictionary(d_list,n_pat):
     my_dict = {}
     my_text = []
     my_list = []
     f_list = []
     tmp_list = []
     for word in d_list:
            if not(re.search(r'\#',word)) and not (re.search(r'ecl_attribute_def\   ecl_job_attr_def\[\]',word)):
                  tmp_list.append(word)
                  my_text = ''.join(tmp_list)
                  l = []
                  l = my_text.split(";")
                  for x in l:
                      my_list =[item.strip() for item in x.split("|")]
                      my_dict = {my_list[0]:my_list[1:]}

       return my_dict

从主函数调用 -

attr_d = {}
for line in tmplf:
     skipped_blocks_ecl_tmpl.append(line)
     attr_d = fill_dictionary(skipped_blocks_ecl,new_pattern)

但现在某处我想使用这个字典(attr_d)来替换文件中的值。

for line in skipped_blocks_ecl:
    for i, j in attr_d.iteritems():
         print i, "=" ,j
         if line == attr_d[i]:

但attr_d似乎没有任何价值,有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

首先,在每次迭代中,用这一行覆盖整个字典

 my_dict = {my_list[0]:my_list[1:]}

我不能说我喜欢它,但至少你的代码应该改为

def fill_dictionary(d_list,n_pat):
    my_dict = {}
    for x in l:
         my_list =[item.strip() for item in x.split("|")]
         my_dict[my_list[0]] = my_list[1:]

    return my_dict

修改

OP的演示:

>>> l = ['Are|you', 'absolutely|sure']
>>> print fill_dictionary(None, None)
{'Are': ['you']}
{'absolutely': ['sure']}
{'absolutely': ['sure']}
>>> 

正如您所看到的,您的字典已填充 - 从它处理的最后一个字符串开始。这很可能不是你想要的。 另一点 - 你没有在函数中使用函数参数 - 我只是使用 None 来补充它们,并且函数有效。您应该丢弃它们或使用它们。