Eu tenho lista com alguns valores
mylist = ['1', 'Tom', 'Jerry', '2', 'Sinchan', 'Shero']
Minha saída esperada
[{'id': '1', 'mod': ['Tom', 'Jerry']}, {'id': '2', 'mod': ['Sinchan', 'Shero']}]
Meus Experimentos
mylist = ['1', 'Tom', 'Jerry', '2', 'Sinchan', 'Shero']
data_list = []
mod = []
for i in mylist:
if i.isdigit() == True:
data = {}
data['id'] = i
data_list.append(data)
else:
mod.append(i)
data['mod'] = mod
print data_list
Obtendo a saída
[{'id': '1', 'mod': ['Tom', 'Jerry', 'Sinchan', 'Shero']}, {'id': '2', 'mod': ['Tom', 'Jerry', 'Sinchan', 'Shero']}]
Estou tentando obter o valor do mod com base no número e assim por diante, tentei, mas continuei com a lógica, por favor me ajude a encontrar a solução. Desde já, obrigado.
Seu erro imediato é não criar uma nova mod
lista para cada usuário encontrado. Todas as suas entradas de dicionário compartilham um único objeto de lista, e acrescentar mais valores à lista mostrará essas entradas extras por meio das referências compartilhadas:
>>> 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']}]
Lembre-se: os nomes do Python são referências a valores e você pode compartilhar essas referências.
Em vez disso, adicione uma nova lista vazia ao data
dicionário ao criá-lo:
for i in mylist:
if i.isdigit():
data = {'id': i, 'mod': []}
data_list.append(data)
else:
data['mod'].append(i)
Com uma nova lista vazia anexada a cada data
dicionário, você não verá mais dados compartilhados:
>>> 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']}]
Observe que você não precisa usar == True
; a if
instrução já testa se a expressão produziu um valor verdadeiro, == True
para produzir um True
resultado é redundante aqui.
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras