python - 将字典数据附加到 python 列表中时输出更改

标签 python python-3.x list dictionary data-extraction

我有一本包含特定格式数据的字典。当我单独打印字典时,它正确打印数据,但是当我将所有字典添加到列表中然后打印列表时,它打印错误的输出。我可以知道这个问题的解决方案吗?

我的代码:

import glob
import os
list_for_dictionary = []
list_for_dictionary_2 = []

data_location = 'D:\\sample_data'  # folder containing all the data
for root, directories, files in os.walk(data_location):
    for directory in directories:
        loc = (data_location + '/' + directory + '/*')
        all_files = glob.glob(loc)
        for filename in all_files:
            list_for_dictionary.clear()
            f = open(filename) 
            for line_number, line in enumerate(f, 1):
                dictionary = {"fileLine": line.strip(), "lineNumber": int(line_number), "fileName": filename.split("\\")[-1]}
                list_for_dictionary.append(dictionary)

            dictionary_2={"collection":[], "documentName":filename.split("\\")[-1],"returnId":0,"docData":{"Matches":list_for_dictionary}}
            print(dictionary_2)
            list_for_dictionary_2.append(dictionary_2)
print(list_for_dictionary_2)

预期输出:

[{'collection': [], 'documentName': 'sample.txt', 'returnId': 0, 'docData': {'Matches': [{'fileLine': 'Name of Person: John', 'lineNumber': 1, 'fileName': 'sample.txt'}, {'fileLine': 'Age: 24 years', 'lineNumber': 2, 'fileName': 'sample.txt'}]}}
{'collection': [], 'documentName': 'sample2.txt', 'returnId': 0, 'docData': {'Matches': [{'fileLine': 'Name of Person: Matthews', 'lineNumber': 1, 'fileName': 'sample2.txt'}, {'fileLine': 'Age: 32 years', 'lineNumber': 2, 'fileName': 'sample2.txt'}]}}
{'collection': [], 'documentName': 'sample3.txt', 'returnId': 0, 'docData': {'Matches': [{'fileLine': 'Name of Person: Alisa', 'lineNumber': 1, 'fileName': 'sample3.txt'}, {'fileLine': 'Age: 40 years', 'lineNumber': 2, 'fileName': 'sample3.txt'}]}}
{'collection': [], 'documentName': 'sample4.txt', 'returnId': 0, 'docData': {'Matches': [{'fileLine': 'Name of Person: Jacob', 'lineNumber': 1, 'fileName': 'sample4.txt'}, {'fileLine': 'Age: 60 years', 'lineNumber': 2, 'fileName': 'sample4.txt'}]}}]

我的输出:

[{'collection': [], 'documentName': 'sample.txt', 'returnId': 0, 'docData': {'Matches': [{'fileLine': 'Name of Person: Jacob', 'lineNumber': 1, 'fileName': 'sample4.txt'}, {'fileLine': 'Age: 60 years', 'lineNumber': 2, 'fileName': 'sample4.txt'}]}},
{'collection': [], 'documentName': 'sample2.txt', 'returnId': 0, 'docData': {'Matches': [{'fileLine': 'Name of Person: Jacob', 'lineNumber': 1, 'fileName': 'sample4.txt'}, {'fileLine': 'Age: 60 years', 'lineNumber': 2, 'fileName': 'sample4.txt'}]}}, 
{'collection': [], 'documentName': 'sample3.txt', 'returnId': 0, 'docData': {'Matches': [{'fileLine': 'Name of Person: Jacob', 'lineNumber': 1, 'fileName': 'sample4.txt'}, {'fileLine': 'Age: 60 years', 'lineNumber': 2, 'fileName': 'sample4.txt'}]}}, 
{'collection': [], 'documentName': 'sample4.txt', 'returnId': 0, 'docData': {'Matches': [{'fileLine': 'Name of Person: Jacob', 'lineNumber': 1, 'fileName': 'sample4.txt'}, {'fileLine': 'Age: 60 years', 'lineNumber': 2, 'fileName': 'sample4.txt'}]}}]

最佳答案

看起来像是一个引用错误。您正在执行 "docData":"Matches":list_for_dictionary}},然后在后续循环中覆盖 list_for_dictionary

初始化一个新的list_for_dictionary = [],而不是清除list_for_dictionary.clear()

import glob
import os
list_for_dictionary = []
list_for_dictionary_2 = []

data_location = 'D:\\sample_data'  # folder containing all the data
for root, directories, files in os.walk(data_location):
    for directory in directories:
        loc = (data_location + '/' + directory + '/*')
        all_files = glob.glob(loc)
        for filename in all_files:
            list_for_dictionary = []
            f = open(filename) 
            for line_number, line in enumerate(f, 1):
                dictionary = {"fileLine": line.strip(), "lineNumber": int(line_number), "fileName": filename.split("\\")[-1]}
                list_for_dictionary.append(dictionary)

            dictionary_2={"collection":[], "documentName":filename.split("\\")[-1],"returnId":0,"docData":{"Matches":list_for_dictionary}}
            print(dictionary_2)
            list_for_dictionary_2.append(dictionary_2)
print(list_for_dictionary_2)

关于python - 将字典数据附加到 python 列表中时输出更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52615888/

相关文章:

python - 为什么当 python 中的表达式发生变化时 mutable 不起作用?

python - 如何设置 if 语句以使用条件数组作为 python 中的输入

python - Matplotlib 在我的 Linux 机器上找不到安装的字体

Python 全局列表未更新

Python 两个列表之间的通配符匹配

python - 在脚本中转置矩阵时出现索引错误

python - 如何使用 sqlalchemy 或 SQLObject 建立需要 CA-CERT 的 mysql 连接

python - python 并行化递归

python - 如何在 python 中更快地进行搜索?

python-3.x - Python 记录器困惑