gpt4 book ai didi

Python修改字典列表中的值

转载 作者:太空宇宙 更新时间:2023-11-04 02:19:47 25 4
gpt4 key购买 nike

我正在读取一个文件,该文件的每一行都包含一个字典,但整个文件本身既没有格式化为字典也没有列表。

{"key1":"value11", "key2":"value12"}
{"key1":"value21", "key2":"value22"}

我想做的是读取文件并更改某些键的值。像这样。

with open(...
data = reader.read().split("\n")
for dic in data:
entry = json.loads(dic)
entry["key"] = "another value"

我知道如果我想将它保存到一个文件我必须再次打开该文件,但它甚至在内存中都没有改变,我猜这与 for i in data 的方式有关可行,但我不想从每个文件中复制一份,主要是因为我有很多行。

还有其他我没看到的方法吗?

最佳答案

为了提高效率,我建议将您的数据转换为单个 dict 对象的字典。您可以使用行号进行索引。

首先将数据读入单个字典:

from io import StringIO
import json, pickle

x = StringIO('''{"key1":"value11", "key2":"value12"}
{"key1":"value21", "key2":"value22"}''')

d = {}

# replace x with open('file.txt', 'r')
with x as fin:
for idx, line in enumerate(fin):
d[idx] = json.loads(line.strip())

print(d)

# {0: {'key1': 'value11', 'key2': 'value12'},
# 1: {'key1': 'value21', 'key2': 'value22'}}

然后写入一个Pickle文件,注意pickle.HIGHEST_PROTOCOL代表一种高效的二进制格式:

filename = r'C:\temp\out.pkl'
# never work with the old format again!
with open(filename, 'wb') as fout:
pickle.dump(d, fout, pickle.HIGHEST_PROTOCOL)

然后再次读取文件:

with open(filename, 'rb') as fin:
d_in = pickle.load(fin)

print(d_in)

# {0: {'key1': 'value11', 'key2': 'value12'},
# 1: {'key1': 'value21', 'key2': 'value22'}}

现在更改子字典就像 d[1]['key1'] = 'newval' 一样简单。

请注意,酸洗/序列化是特定于版本的。但是,通过这种一次性数据重组,您应该会看到性能的大幅提升。

关于Python修改字典列表中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51891858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com