2014-01-17 98 views
-1

看起来很简单,但我认为该对象将超出范围! 我有一个函数来构造一个词典 -从python无法访问的函数返回的字典

 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 

,并从main函数被调用 -

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

在你的第一个代码块中,你有'''用于x中的l:''',其中'''l'''是从哪里来的? – wnnmaw

+0

你能否提供第二部分和第三部分之间的代码,这个问题可能就在那里。 – JelteF

+0

不,我已经从函数中删除了一些代码,该函数正常工作,它返回的字典以及它存储在attr_d因为我打印,可以看到填充的字典 – user3203406

回答

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

正如您所看到的,您的字典是从它处理的最后一个字符串填充的。这可能不是你想要的。 另一点 - 你不使用函数内的函数参数 - 我只是补充它们,并且该函数起作用。你应该放弃它们或使用它们。

+0

'l'从哪里来?不应该是d_list? – Totem

+0

我没有打算修复代码的所有差异。由于OP没有提到异常,因此__l__可能是全局范围内的一些变量 – volcano

+0

函数fill_dictionary(d_list,n_pat):正常工作并返回一个填充字典给attr_d – user3203406