Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

transformar minha matriz (lista) em dicionário

Olá, tenho a seguinte matriz:

In [19]: cells
Out[19]: 
[['frutas', 'legumes', 'bijuterias', 'higiene'],
 ['123', '8708', '1212', '3'],
 ['456', '', '1313', '2'],
 ['789', '', '1414', '1'],
 ['', '', '1515'],
 ['', '', '2525'],
 ['', '', '2626'],
 ['', '', '2727'],
 ['', '', '2828'],
 ['', '', '2929'],
 ['', '', '3030']]

E gostaria de saber como posso transformá-la em um dicionário, onde cada item da primeira linha seja uma key, e os dados abaixo dela sejam colunas, como por exemplo:

matriz = {
        'frutas': '123','456,'789,
        'legumes':'8708, ...
}

Obrigada pela ajuda! Matriz de 4 colunas

3 respostas

Olá Yaran, tudo bem? Espero que sim!

Primeiro fiz um ajuste no cells, para acrescentar valores vazios da coluna higiente, para que a matriz tenha o número de colunas correspondentes:

cells = [['frutas', 'legumes', 'bijuterias', 'higiene'],
 ['123', '8708', '1212', '3'],
 ['456', '', '1313', '2'],
 ['789', '', '1414', '1'],
 ['', '', '1515', ''],
 ['', '', '2525', ''],
 ['', '', '2626', ''],
 ['', '', '2727', ''],
 ['', '', '2828', ''],
 ['', '', '2929', ''],
 ['', '', '3030','']]

Depois criei um dicionário vazio onde irei armazenar as informações e fiz um for aninhado:

dicionario = {}
for i in range(len(cells[0])):
    lista_temp = []
    for j in range(1,len(cells)):
        lista_temp.append(cells[j][i])
    dicionario[cells[0][i]] = lista_temp

Os nomes das colunas serão as chaves do dicionário, portanto cells[0][i] pegará o nome da coluna e será salvo uma lista com todos os itens referentes àquela coluna.

Uma alternativa para isso é trabalhar com a biblioteca pandas, no qual você consegue fazer a importação de arquivos csv ou excel para dentro de um DataFrame, que no caso é um tipo de tabela da biblioteca.

Salvei os dados em um arquivo de texto, em formato csv e utilizei a biblioteca pandas e o resultado foi esse:

Importando arquivo csv usando a biblioteca pandas

A biblioteca identifica automaticamente os valores numéricos, e onde estão escrito NaN são valores nulos. É muito prático trabalhar com os dados no momento que estão em um DataFrame.

Você poderia fazer de maneira direta usando a função pd.read_excel() que lê arquivos diretos de planilhas do excel.

Temos diversos cursos na plataforma que ensinam como trabalhar com a biblioteca pandas caso tenha interesse.

Bons estudos!

OIe! Tentei dessa forma que você me sugeriu e tive esse erro:

      3     lista_temp = []
      4     for j in range(1,len(cells)):
----> 5         lista_temp.append(cells[j][i])
      6     dicionario[cells[0][i]] = lista_temp
      7 

IndexError: list index out of range

Achei estranho, uma vez que o índice deveria estar correto. Por favor, conseguiria me ajudar novamente?

solução!

Olá Yara, tudo bem? Espero que sim!

O problema está nos dados iniciais, eu precisei adicionar novos dados nas listas, porque as últimas listas possuem apenas 3 elementos, quando na verdade temos 4 colunas.

Esses são os dados que você passou:

[['frutas', 'legumes', 'bijuterias', 'higiene'],
 ['123', '8708', '1212', '3'],
 ['456', '', '1313', '2'],
 ['789', '', '1414', '1'],
 ['', '', '1515'],
 ['', '', '2525'],
 ['', '', '2626'],
 ['', '', '2727'],
 ['', '', '2828'],
 ['', '', '2929'],
 ['', '', '3030']]

Acrescentei valores nas últimas listas:

cells = [['frutas', 'legumes', 'bijuterias', 'higiene'],
 ['123', '8708', '1212', '3'],
 ['456', '', '1313', '2'],
 ['789', '', '1414', '1'],
 ['', '', '1515', ''],
 ['', '', '2525', ''],
 ['', '', '2626', ''],
 ['', '', '2727', ''],
 ['', '', '2828', ''],
 ['', '', '2929', ''],
 ['', '', '3030','']]

Valores acrescentados nas listas

Bons estudos!