Eu gosto da sintaxe de compreensão da lista Python.
Também pode ser usado para criar dicionários? Por exemplo, iterando sobre pares de chaves e valores:
mydict = {(k,v) for (k,v) in blah blah blah} # doesn't work
Eu gosto da sintaxe de compreensão da lista Python.
Também pode ser usado para criar dicionários? Por exemplo, iterando sobre pares de chaves e valores:
mydict = {(k,v) for (k,v) in blah blah blah} # doesn't work
collections.Counter
é um tipo especializado de ditado para contar coisas: Usando um dicionário para contar os itens de uma listaRespostas:
Do Python 2.7 e 3 em diante, você deve apenas usar a sintaxe de compreensão do dict :
No Python 2.6 e versões anteriores, o
dict
built-in pode receber uma iterável de pares de chave / valor, para que você possa transmitir uma compreensão de lista ou expressão de gerador. Por exemplo:No entanto, se você já possui iterável (s) de chaves e / ou vals, não precisa usar nenhuma compreensão - é mais simples ligar
dict
diretamente para o built-in:fonte
No Python 3 e Python 2.7+, as compreensões de dicionário se parecem com as abaixo:
Para Python 2.6 ou anterior, consulte a resposta do fortran .
fonte
Na verdade, você nem precisa iterar sobre o iterável se ele já compreender algum tipo de mapeamento, o construtor de ditado fazendo isso graciosamente por você:
fonte
No Python 2.7, é assim:
Feche-os !
fonte
Você está procurando a frase "compreensão de ditados" - na verdade:
Supondo que
blah blah blah
é uma iterável de duas tuplas - você está tão perto. Vamos criar alguns "blahs" assim:Sintaxe de compreensão de ditado:
Agora a sintaxe aqui é a parte do mapeamento. O que torna isso uma
dict
compreensão em vez de umaset
compreensão (que é o que o seu pseudo-código se aproxima) é o cólon,:
como abaixo:E vemos que funcionou e deve manter a ordem de inserção como no Python 3.7:
No Python 2 e até 3.6, o pedido não era garantido:
Adicionando um filtro:
Todas as compreensões apresentam um componente de mapeamento e um componente de filtragem que você pode fornecer com expressões arbitrárias.
Então você pode adicionar uma parte do filtro ao final:
Aqui estamos apenas testando se o último caractere é divisível por 2 para filtrar os dados antes de mapear as chaves e os valores.
fonte
Versão Python <2.7 (RIP, 3 de julho de 2010 a 31 de dezembro de 2019) , faça o seguinte:
Versão Python> = 2.7, faça o seguinte:
fonte
Para adicionar à resposta do @ fortran, se você quiser repetir uma lista de chaves
key_list
e uma lista de valoresvalue_list
:ou
fonte
Aqui está outro exemplo de criação de dicionário usando compreensão de ditado:
O que estou tentando fazer aqui é criar um dicionário do alfabeto em que cada par; é a letra em inglês e sua posição correspondente no alfabeto inglês
Observe o uso de enumerar aqui para obter uma lista de alfabetos e seus índices na lista e trocar os alfabetos e índices para gerar o par de valores-chave para o dicionário
Espero que ele lhe dê uma boa idéia do dicionário e incentive você a usá-lo com mais frequência para tornar seu código compacto
fonte
d = {k: v+1 for v, k in enumerate(string.ascii_lowercase)}
Tente isso,
Suponha que temos duas listas país e capital
Em seguida, crie um dicionário a partir das duas listas:
A saída é assim,
fonte
O Python suporta compreensões de ditado, que permitem expressar a criação de dicionários em tempo de execução usando uma sintaxe concisa da mesma forma.
Uma compreensão de dicionário assume o formato {key: value for (key, value) em iterável}. Essa sintaxe foi introduzida no Python 3 e suportada até o Python 2.7, portanto, você poderá usá-lo independentemente da versão do Python que instalou.
Um exemplo canônico é pegar duas listas e criar um dicionário em que o item em cada posição na primeira lista se torna uma chave e o item na posição correspondente na segunda lista se torna o valor.
A função zip usada dentro dessa compreensão retorna um iterador de tuplas, em que cada elemento na tupla é obtido da mesma posição em cada uma das iteráveis de entrada. No exemplo acima, o iterador retornado contém as tuplas ("a", 1), ("b", 2) etc.
Resultado:
('i': 512, 'e': 64, 'o': 2744, 'h': 343, 'l': 1331, 's': 5832, 'b': 1, 'w': 10648, ' c ': 8,' x ': 12167,' y ': 13824,' t ': 6859,' p ': 3375,' d ': 27,' j ': 729,' a ': 0,' z ' : 15625, 'f': 125, 'q': 4096, 'u': 8000, 'n': 2197, 'm': 1728, 'r': 4913, 'k': 1000, 'g': 216 , 'v': 9261}
fonte
Este código criará um dicionário usando compreensão de lista para várias listas com valores diferentes que podem ser usados para
pd.DataFrame()
enumerate
passarán
paravals
para combinar cada umkey
com sua listafonte
Apenas para dar outro exemplo. Imagine que você tem a seguinte lista:
e você deseja transformá-lo em um ditado em que a chave é o índice e o valor é o elemento na lista. Você pode fazer isso com a seguinte linha de código:
fonte
Você pode criar um novo ditado para cada par e mesclá-lo com o ditado anterior:
Obviamente, isso se aproxima exige
reduce
a partirfunctools
.fonte