python - 从 Python 列表中将唯一项添加到 .txt 文件
问题描述
我有一个字典列表,例如
item_list = [
{'Name': 'Bob', 'Surname': 'Smith'},
{'Name':'Alice', 'Surname':'Black'},
{'Name':'Maggie', 'Surname':'McLaren'}
]
同样,我有 .txt 文件,其中包含字典格式的现有行(作为我的列表):
{'Name': 'Jared', 'Surname': 'Long'}
{'Name': 'John', 'Surname': 'White'}
{'Name': 'Bob', 'Surname': 'Smith'}
{'Name': 'Julia', 'Surname': 'Moor'}
而且我需要将列表中的所有唯一项目添加到此文件中,所以最后我想要:
{'Name': 'Jared', 'Surname': 'Long'}
{'Name': 'John', 'Surname': 'White'}
{'Name': 'Bob', 'Surname': 'Smith'}
{'Name': 'Julia', 'Surname': 'Moor'}
{'Name':'Alice', 'Surname':'Black'}
{'Name':'Maggie', 'Surname':'McLaren'}
我试图用循环来做,但没有任何帮助,结果我有重复的行。此外,我的文件以“a+”模式打开。有人可以帮忙吗?
解决方案
我会这样解决你的问题:
import json
f = open(..., 'a+')
to_add = [
{'Name': 'Bob', 'Surname': 'Smith'},
{'Name':'Alice', 'Surname':'Black'},
{'Name':'Maggie', 'Surname':'McLaren'}
]
existing = set()
f.seek(0)
for line in f:
line = line.replace("\'", "\"")
v = frozenset(json.loads(line).items())
existing.add(v)
for name in to_add:
v = frozenset(name.items())
if v not in existing:
f.write(json.dumps(name) + "\n")
...
f.close()
该解决方案sets
用于他们的快速查找操作。我还用双引号替换了您的单引号,以使其成为有效的 JSON。
推荐阅读
- qt - c++11 range-loop 可能会分离 Qt 容器
- sql - 在 SQL 中转换数据,将行拆分为列
- postgresql - Npgsql Entity Framework Core PostgreSQL 全文搜索按部分词
- css - css 模块文件正在加载,但样式不起作用
- c# - 打开pdf文件时出现Win32Exception
- render - 使用 tmux 调整大小时 Nvim 呈现错误
- javascript - 如何使用 log4js 向记录器添加/修改颜色?
- php - 无法在 laravel 8 中显示图像
- javascript - 用于 websockets 内部的 Chrome DevTools 网络工具
- r - 有没有办法在闪亮的输入小部件标签中获得数学符号?