首页 > 解决方案 > 从 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+”模式打开。有人可以帮忙吗?

标签: pythonlistloopsfiledictionary

解决方案


我会这样解决你的问题:

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。


推荐阅读