我有一个简单的 for 循环,其中包含一个计数变量,该变量作为字符串的一部分保存到字典中。
def chunk_page(page):
pages = []
chunks = chunk_string(page['content'], 500, 40)
ints = []
cnt = 0
for chunk in chunks:
ints.append(cnt)
tmpPage = page
if cnt == 1: chunk = chunk[0:chunk.rfind(' ')]
else: chunk = chunk[chunk.find(' '): chunk.rfind(' ')]
tmpPage['content'] = chunk
if('_' in tmpPage['metadata']['id']):
tmpPage['metadata']['id'] = str(page['metadata']['id'][0:-1] + str(int(cnt)))
else:
tmpPage['metadata']['id'] = str(page['metadata']['id'] + "_" + str(int(cnt)))
pages.append(dict(tmpPage))
cnt = cnt + 1
return pages
在我看来,应该只迭代 id,但是在循环结束时,这些值都设置为最新值 即我得到 3 个 id 类似于 272975842_2 的页面。 我不确定我的引用在这里是如何错误的,我如何显式地将 cnt 复制到这个 str 值中,为什么添加到字符串后它仍然是 cnt ?
问题不在于
cnt
,而在于tmpPage
。当您执行 tmpPage = page
时,您并不是在创建 page
的新副本,而只是对 same 字典的 新引用。当您修改 tmpPage
时,您也在修改 page
。
要修复它,您需要在修改之前创建
page
的副本:
import copy
def chunk_page(page):
pages = []
chunks = chunk_string(page['content'], 500, 40)
ints = []
cnt = 0
for chunk in chunks:
ints.append(cnt)
tmpPage = copy.deepcopy(page)
# The rest of your code