在Python中高效地将JSON元素添加到列表并去重
我有一个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)