看起来很简单,但我认为对象超出了范围! 我有一个构造字典的函数 -
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似乎没有任何价值,有人可以帮忙吗?
答案 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 来补充它们,并且函数有效。您应该丢弃它们或使用它们。