python 列表中添加字典元素值覆盖

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/makingLJ/article/details/80257068

python 列表中添加字典元素 值覆盖


今天在列表中循环添加元素,遇到了一个问题,后面修改字典元素的值时,之前添加到列表中的字典元素的值也被更改了。
代码如下
代码主要是将一个jl文件转换为csv文件
jl 文件的格式如下
33.png

# coding: utf-8
import csv
import json
import sys
import codecs
from pprint import pprint
from copy import deepcopy

input_file = "junodata.jl"
output_file = "track_data_trimmed.csv"

headers = ["id", "release_artist", "release_cat_num", "release_date",
            "release_genre", "release_label", "release_title",
            "track_name", "track_url"]

index_id = 1
with open(input_file, 'r') as f_jl:
    with open(output_file, 'w+') as csv_f:
        f_csv = csv.DictWriter(csv_f, headers)
        f_csv.writeheader()
        for jl_data in f_jl:
            json_data = json.loads(jl_data)
            # 数据转换
            data = dict()
            row_data = list()
            row_data.clear()
            data['release_artist'] = json_data['artist']
            data['release_cat_num'] = json_data['catalog_number']
            data['release_date'] = json_data['release_date']
            data['release_genre'] = json_data['genre']
            data['release_label'] = json_data['label']
            data['release_title'] = json_data['title']
            for track_infor in json_data['tracks']:
                data['id'] = index_id
                data['track_name'] = track_infor[0]
                data['track_url'] = track_infor[1]
                row_data.append(data)
                index_id += 1
            # 写入CSV
            f_csv.writerows(row_data)
print("Done!")

运行结果如下
1.png

查阅资料
list增加字典元素覆盖问题
Python中向列表添加字典元素的问题
这里主要是变量引用的问题,添加深度复制,解决问题。

# coding: utf-8
import csv
import json
import sys
import codecs
from pprint import pprint
from copy import deepcopy

input_file = "junodata.jl"
output_file = "track_data_trimmed.csv"

headers = ["id", "release_artist", "release_cat_num", "release_date",
            "release_genre", "release_label", "release_title",
            "track_name", "track_url"]

index_id = 1
with open(input_file, 'r') as f_jl:
    with open(output_file, 'w+') as csv_f:
        f_csv = csv.DictWriter(csv_f, headers)
        f_csv.writeheader()
        for jl_data in f_jl:
            json_data = json.loads(jl_data)
            # 数据转换
            data = dict()
            row_data = list()
            row_data.clear()
            data['release_artist'] = json_data['artist']
            data['release_cat_num'] = json_data['catalog_number']
            data['release_date'] = json_data['release_date']
            data['release_genre'] = json_data['genre']
            data['release_label'] = json_data['label']
            data['release_title'] = json_data['title']
            for track_infor in json_data['tracks']:
                data['id'] = index_id
                data['track_name'] = track_infor[0]
                data['track_url'] = track_infor[1]
                row_data.append(data)
                index_id += 1
                # 需要深度复制 否则下次更改时会连之前的列表中的值一起更改
                data = deepcopy(data)
            # 写入CSV
            f_csv.writerows(row_data)
print("Done!")

22.png

猜你喜欢

转载自blog.csdn.net/makingLJ/article/details/80257068