一、目标
对写入的数据设置为集合套集合的格式
如:
a={"a":{"b":"c"}
这样的集合在for循环结构中,即希望在for循环中出现自己需要的数据则可以进行相应的变更
程序如下:
with open("情节.txt", "r", encoding="utf-8")as f:
condition = f.readlines()
for i in condition:
tuple = process.extractOne(i.strip("\n"), text2)
# print(list(tuple))
if list(tuple)[-1] >= 90 and tuple[0] != "犯罪":
element = list(tuple)[0]
print("字符串模糊匹配的前几位为: ", element)
if element + "\n" in condition:
print("在的: ",element)
element_list[title] = 1
dataframe[i.strip("\n")] = element_list
else:
element_list[title] = 0
dataframe[i.strip("\n")] = element_list
在最后这段if-else的条件判断中就是试图实现自己上述的目标,如果符合条件则将集合中的内容设为1,否者设为0
二、问题
从逻辑上没有发现问题,单个输出时即没有else时,也没有问题
但是一旦存在else时,就会出现覆盖的问题,即后续内容会覆盖前面的内容,原因直到现在都没有找到
一旦匹配成果就会全部更新
没有匹配成果
最终结果则全部被覆盖
三、解决方法
尝试过许多方法都没有办法解决,直到最后用来一个比较复杂的方法,就是先将内容全部设为0,然后对这个全部设为0的集合进行更新
"""两个集合以便更新,直接似乎无法更新"""
for i in condition:
element_list[title] = 0
dataframe[i.strip("\n")] = element_list
for i in condition:
tuple = process.extractOne(i.strip("\n"), text2)
if tuple[1]>90 and tuple[0] != "犯罪":
print("存在的量刑情节: ", tuple[0])
element_lists[title] = 1
dataframes[tuple[0]] = element_lists
dataframe_ = dict(dataframe,**dataframes)
for i in condition:
element_list[title] = 0
dataframe[i.strip("\n")] = element_list
是先全部设为0的集合
这个是匹配时得到的集合
for i in condition:
tuple = process.extractOne(i.strip("\n"), text2)
if tuple[1]>90 and tuple[0] != "犯罪":
print("存在的量刑情节: ", tuple[0])
element_lists[title] = 1
dataframes[tuple[0]] = element_lists
结果为:
全部设为0时:
匹配到的:
最后更新后的:
四、结语
虽然最后成功了,但是始终不明白之前的想法为什么不行!!!!