Обнаружить повторяющиеся элементы python - PullRequest
2 голосов
/ 08 мая 2020

Я постоянно получаю данные с сервера и могу получать данные через следующую строку кода:

id, type, value = getId(payload)

После этого я хотел бы записать их в файл через:

out.write(str(id) + ";" + str(type) + ";" + str(value) + "\n")

Дело в том, что один и тот же идентификатор может появляться несколько раз, но значение будет другим. Поэтому я хотел бы расширить out.write следующим образом, чтобы разные значения добавлялись справа, но по-прежнему ссылались на один и тот же идентификатор:

out.write(str(id) + ";" + str(type) + ";" + str(value) + ";" + str(value1) + ";" + str(value2) + "\n")

Есть ли у кого-нибудь идеи, как это сделать это в python?

Ответы [ 2 ]

2 голосов
/ 08 мая 2020

Используя подсказки, которые уже были добавлены в качестве комментариев, вы можете создать что-то вроде этого:

from collections import defaultdict

values = defaultdict(set)
types = dict()

for payload in input_stream:
    id, type, value = get(payload)
    values[id].add(value)
    types[id] = type

for id in types.keys():
    out.write(";".join(map(str, [id, types[id]] + list(values[id]))) + "\n")

Если значения больше относятся к временному ряду (важен порядок), замените set на list.

2 голосов
/ 08 мая 2020

Вы хотите сохранить словарь, где ключом в словаре является ваш id, а значение - set, и вы можете добавить все значения

from collections import defaultdict
results = defaultdict(set)

id, type, value = getId(payload)
results[id].add(value)

Этот словарь затем сохранит все значения на id.

Следует отметить, что использование набора удалит количество дубликатов, поэтому, если вы хотите сохранить каждое значение, включая дубликаты, используйте list вместо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...