Ваша немедленная ошибка - не создавать новый mod
список для каждого пользователя, которого вы нашли. Все записи вашего словаря совместно используют один объект списка, и добавление дополнительных значений в список покажет эти дополнительные записи через общие ссылки:
>>> mod = []
>>> data_list = [{'mod': mod}, {'mod': mod}] # simplified version of your result
>>> data_list
[{'mod': []}, {'mod': []}]
>>> mod.append('Tom')
>>> data_list
[{'mod': ['Tom']}, {'mod': ['Tom']}]
>>> mod.append('Jerry')
>>> data_list
[{'mod': ['Tom', 'Jerry']}, {'mod': ['Tom', 'Jerry']}]
Помните: Имена Python являются ссылками на значения , и вы можете поделиться этими ссылками.
Вместо этого добавьте новый пустой список в словарь data
при его создании:
for i in mylist:
if i.isdigit():
data = {'id': i, 'mod': []}
data_list.append(data)
else:
data['mod'].append(i)
С новым пустым списком, прикрепленным к каждому словарю data
, вы больше не увидите общие данные:
>>> mylist = ['1', 'Tom', 'Jerry', '2', 'Sinchan', 'Shero']
>>> data_list = []
>>> for i in mylist:
... if i.isdigit():
... data = {'id': i, 'mod': []}
... data_list.append(data)
... else:
... data['mod'].append(i)
...
>>> data_list
[{'id': '1', 'mod': ['Tom', 'Jerry']}, {'id': '2', 'mod': ['Sinchan', 'Shero']}]
Обратите внимание, что вам не нужно использовать == True
; оператор if
уже проверяет, дает ли выражение истинное значение, == True
для получения результата True
здесь избыточно.