首页 > 解决方案 > Python 3 未正确附加到列表

问题描述

我有一个解析制表符分隔的文本文件的函数。解析只是获取每一列并将其分配到字典中。代码如下:

def parseRatingsFile():
    jsonArray = []
    json = {
        "userID": "placeholder",
        "itemID": "placeholder",
        "rating": "placeholder",
        "timestamp": "placeholder"
    }
    with open(filePath, 'r') as file:
        data = file.readlines()
        data = [x.strip() for x in data]
        for row in data:
            cols = row.split("\t")
            json["userID"] = cols[0]
            json["itemID"] = cols[1]
            json["rating"] = cols[2]
            json["timestamp"] = cols[3]
            # print(json)
            jsonArray.append(json)
    pprint.pprint(jsonArray)
    return jsonArray

如果我只打印出jsonfor 循环中的字典,我会得到这个输出(这是正确的):

{'userID': '276', 'itemID': '246', 'rating': '4', 'timestamp': '874786686'}
{'userID': '557', 'itemID': '529', 'rating': '5', 'timestamp': '881179455'}
{'userID': '913', 'itemID': '258', 'rating': '4', 'timestamp': '889331049'}

如果我打印出jsonArray列表,我会得到以下输出:

[{'itemID': '258', 'rating': '4', 'timestamp': '889331049', 'userID': '913'},
 {'itemID': '258', 'rating': '4', 'timestamp': '889331049', 'userID': '913'},
 {'itemID': '258', 'rating': '4', 'timestamp': '889331049', 'userID': '913'}]

我并不特别关心顺序的变化。奇怪的是它jsonArray只有最后更新的json字典,并且重复它的次数与循环中的迭代次数相同。我正在使用 python 3.6.6。

Does append in python ignore the changes that occur in for loops? Otherwise, I have no clue why this is not working

标签: pythonpython-3.6

解决方案


推荐阅读