Lista de processos Python com base em uma condição

Ajay Kumar

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.

Martijn Pieters

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 datadicioná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 datadicioná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 ifinstrução testa se a expressão produziu um valor verdadeiro, == Truepara produzir um Trueresultado é redundante aqui.

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Ignorar elementos em uma condição com base em uma compreensão de lista em python

Python Altera parte de uma string com base em uma condição de uma lista

Python: dividir uma lista com base em uma condição?

Como combinar dois elementos de uma lista com base em uma determinada condição em python

Reverter uma lista em python com base na condição

Obtenha uma lista de processos em execução com PHP

Alterar strings com base em uma condição em uma lista usando a compreensão de lista

Alterar strings com base em uma condição em uma lista usando a compreensão de lista

Como você exclui um item em uma lista de listas com base em uma condição em python?

Atualizar uma lista com valores de outra lista com base em uma condição

Divida a lista de tuplas em uma lista separada com base em uma condição

Faça iteração de cada elemento de uma lista para dividi-la com base em uma condição - Python

Filtre uma lista de acordo com a condição em Python

Existe uma maneira de "dividir" uma lista em duas com base em uma condição

Qual é a maneira correta de adicionar a uma lista Python com base em uma condição de outra coluna Pandas?

Remova elementos de uma lista em R com base em uma condição

subconjunto de uma lista aninhada com base em uma condição em R

Melhor maneira de separar uma lista em duas novas listas com base em uma condição

extrair o dicionário dentro da lista de dicionário com base em uma condição específica - python

Filtrando uma lista com base em uma condição - c #?

Classificar uma lista com base em uma condição

Eliminando frames de dados de uma lista com base em uma condição?

Remova certos elementos em uma lista com base na condição de outra lista

Python: crie uma nova lista binária com base em alguma condição entre duas séries de pandas

Excluindo elementos de uma lista com base em uma condição

Mova os valores de um dataframe para uma lista com base em uma condição

Como compactar elementos de uma lista com base em uma condição?

retornar um vetor de uma lista com base em uma condição

fatiar uma lista de urls com base em uma condição

TOP lista

quentelabel

Arquivo