Python 已将列表转换为返回空列表的字符串
在下面的代码中,“final”变量产生正确的输出,但当转换为str时,同一个变量“final”产生空列表。有什么想法吗 输入文件的内容- {表:[t1,t2,t3],链接:[link1,link2],过滤器:[1=1,过滤器1,过滤器2]} {表:[t4,t5,t6],链接:[link3,link4],筛选器:[filter3,filter4,filter5]} "Python 已将列表转换为返回空列表的字符串,python,python-3.x,Python,Python 3.x,在下面的代码中,“final”变量产生正确的输出,但当转换为str时,同一个变量“final”产生空列表。有什么想法吗 输入文件的内容- {表:[t1,t2,t3],链接:[link1,link2],过滤器:[1=1,过滤器1,过滤器2]} {表:[t4,t5,t6],链接:[link3,link4],筛选器:[filter3,filter4,filter5]} " “在定义final1时,sql、status、msg是空列表,final是包含空列表的列表。因此final1=strfinal将返
“在定义final1时,sql、status、msg是空列表,final是包含空列表的列表。因此final1=strfinal将返回包含空列表的列表的字符串表示形式 如果您想获得最终结果-我建议将final和final1定义移到函数的末尾。在开始时,您的final如下所示:[[]、[]、[]、[]。此时,您正在将其转换为字符串,因此final1也将为您提供[[]、[]、[]。但在此之后,您将附加到sql、status和msg数组,因此通过引用,您将附加到final。请注意,此更改不会影响final1,因为它是一个没有引用的字符串
您需要在程序的和处将final转换为string,或者至少在运行fw…之后,转换为str不会保留对原始列表的引用。将该调用移到函数的末尾。从我所看到的情况来看,您在函数的开头定义了final和final1,然后修改final的内容,这应该会正确地更新它们。然而,final1在一开始就进行了评估;这是一个字符串,它不会改变。如果需要更新的值,则必须重新计算。
import json
def main():
sql = []
status = []
msg = []
final = [sql,status,msg]
final1 = str(final) # List to string conversion
with open("E:/hadoop/sample.txt", "r") as file:
dict_file = file.readlines()
def fw(**kargs):
# Error Handling in input
if (len(kargs['linkage']) < len(kargs['tables']) - 1):
print('Discrepancy in number of links and tables provided')
sql.append("None")
status.append("Failure")
msg.append("Discrepancy in number of links and tables provided")
else:
df = "select * from " + ', '.join(i for i in kargs['tables']) + " on " + ' and '.join(
i for i in kargs['linkage']) + " where " + ' and '.join(i for i in kargs['filter'])
sql.append(df)
status.append("Success")
msg.append("SQL Created Successfully")
for lines in dict_file:
# Convert dictionary string to dictionary
dct = json.loads(lines)
# Accessing dictionary elements and passing to the function
fw(tables=dct["tables"], linkage=dct["linkage"], filter=dct["filter"])
print(final)
print(final1) # **Returning empty list**
# Executing main()
if __name__=="__main__":
main()