Python 已将列表转换为返回空列表的字符串

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将返

在下面的代码中,“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将返回包含空列表的列表的字符串表示形式

如果您想获得最终结果-我建议将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()