Добавление элементов JSON в список, а затем эффективное удаление дубликатов в Python - PullRequest
1 голос
/ 07 января 2011

У меня есть файл json, например:

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

Мне нужно поместить все значения для набора файлов json в категорию "su" в категориисписок.Таким образом, каждый файл (около 200) будет иметь свой собственный список, тогда я собираюсь объединить список и удалить дубликаты.Целесообразно ли, пока я занимаюсь этим, чтобы сэкономить системные ресурсы и время?

Я думаю о создании списка, циклически перебирая файл json, получая каждое "су", помещая его в список, иди кследующий файл, затем добавьте список, затем просмотрите и удалите дубликаты.

Что касается удаления дубликатов, я думаю о том, как ответить на этот вопрос: Объединение двух списков и удаление дубликатов безудаление дубликатов в исходном списке , если это неэффективно

В основном открыт для рекомендаций о хорошем способе реализации этого.

Спасибо,

Ответы [ 3 ]

4 голосов
/ 07 января 2011

Вы заботитесь о заказе?Если нет, вы можете добавить номера к 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)
1 голос
/ 07 января 2011

Используйте набор 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)
1 голос
/ 07 января 2011

Очень прямой путь будет:

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)
...