在Python中高效地将JSON元素添加到列表并去重

1 投票
3 回答
7380 浏览
提问于 2025-04-16 09:32

我有一个json文件,内容大概是这样的:

[{"fu": "thejimjams", "su": 232104580}, {"fu": "thejimjams", "su": 216575430}, {"fu": "thejimjams", "su": 184695850}]

我需要把很多json文件中“su”这个类别的所有值放到一个列表里。每个文件(大约有200个)都会有自己的列表,然后我会把这些列表合并起来,并去掉重复的值。有没有什么好的方法可以在这个过程中节省系统资源和时间呢?

我在想可以先创建一个列表,然后遍历每个json文件,获取每个“su”的值,把它放到列表里,然后再处理下一个文件,最后把所有的列表合并在一起,再扫描一遍去掉重复的值。

关于去重,我在考虑参考这个问题的答案:合并两个列表并去掉重复值,但不去掉原列表中的重复值,除非这样做效率不高。

总之,我希望能得到一些关于如何实现这个过程的好建议。

谢谢,

3 个回答

1

一种非常简单直接的方法是:

json_list = [{"fu": "thejimjams", "su": 232104580}, {"fu": "thejimjams", "su": 216575430}, {"fu": "thejimjams", "su": 184695850}]

new_list = []
for item in json_list:
    if item not in new_list:
        new_list.append(item)
1

使用一个Python集合,它是专门用来保持元素唯一的列表的。这样在你添加元素的时候,就会自动去掉重复的。

output = set()
for filename in filenames:
    data = json.loads(open(filename, 'r').read())
    for row in data:
        output.add(row.get('su'))

# convert back to a list
output = list(output)
4

你在意顺序吗?如果不在意的话,可以把这些数字放到一个 set() 里,这样就会自动去掉重复的数字。例如,如果你有200个“su”列表:

lists = [
    [...su's for file 1...],
    [...su's for file 2...],
    etc.
]

那么你可以用下面的方式把它们合并成一个大的集合:

set(su for sus in lists for su in sus)

撰写回答