我正在扫描一份文件,列出每行读入的内容。
我将此保存到名为
的列表中testList = []
当我完成填充此列表时,我想将其设置为字典中的值,该字典的键基于另一个列表的元素。 这个想法应该是这样的:
testList = ['InformationA', 'InformationB', 'Lastinfo']
patent_offices = ['European Office', 'Japan Office']
dict_offices[patent_offices[0]] = testList
或
dict_offices = {'European Office' : ['InformationA', 'InformationB', 'Lastinfo'],
'Japan Office' : ['Other list infoA', 'more infoB']}
我想稍后输入dict_offices['European Office']
并打印清单。
但是因为我在阅读文档时动态地收集它,所以我擦除并重用testList
。我所看到的是它被清除后它也被清除在字典的链接中。
如何创建字典以便保存它以便我可以在每个循环中重复使用testList?
这是我的代码:
patent_offices = []
dict_offices = {}
office_index = 0
testList = []
# --- other conditional code not shown
if (not patent_match and start_recording):
if ( not re.search(r'[=]+', bString)): #Ignore ====== string
printString = fontsString.encode('ascii', 'ignore')
testList.append(printString)
elif (not start_recording and patent_match):
dict_offices[patent_offices[office_index]] = testList
start_recording = True
office_index += 1
testList[:] = []
此词典已正确更新,看起来与我想要的完全相同,直到我调用
testList[:] = []
线。这个字典就像testList
一样空白。我知道字典与此相关但我不知道如何不发生这种情况。
答案 0 :(得分:3)
列表是可变的;对同一列表的多次引用将显示您对其所做的所有更改。 testList[:] = []
表示:使用空列表替换此列表中的每个索引。因为您在不同的地方引用相同的列表(包括在字典值中),所以您会看到随处可见的更改。
相反,只需将testList
指向新空列表:
testList = []
只有在要清除列表的内容时,才应使用您使用的空切片分配语法,而不是仅在您想要创建新的空列表时使用。
>>> foo = []
>>> bar = foo
>>> foo.append(1)
>>> bar
[1]
>>> foo is bar
True
>>> foo[:] = []
>>> bar
[]
>>> foo = ['new', 'list']
>>> bar
[]
>>> foo is bar
False
答案 1 :(得分:0)
您必须进行深度检查,see copy.html
dict_offices[patent_offices[office_index]] = copy.deepcopy(testList)
示例:
l = [1,2,3]
b = l
del l[:]
print(b)
---> []
l = [1,2,3]
b = copy.deepcopy(l)
l = []
print (b)
---> [1,2,3]