Resultados es una lista dentro de una lista con los datos como se muestra en la sección de resultados. Espero lograr un diccionario dentro de un diccionario como se muestra en la parte de resultados.

Entrada:

results = [['abc','12'3,'1123','qwe', 'asd'],['abc','123,'1123','qwe', '123'],['abc','123','1123','ewq','zxc'], ['bcd','123','1123','ewq','zxc'], ['bcd','123','1123','ewq','zxc]]

Código:

report_dict = dict()
axis_list = []
results = self.report_data(conn)
for row in results:
  try:
    report_dict[row[0]] = {}
    report_dict[row[0]][row[3]] = row[1]
  except IndexError:
    None 
  print(report_dict)

Resultado:

report_dict = { 'abc': {'qwe':['asd','123'], 'ewq':['zxc']}, 'bcd' : {'qwe':['asd'], 'ewq':['zxc']} …..}

Tenga en cuenta que hay claves duplicadas en el conjunto de datos.

-1
qwerty 13 feb. 2020 a las 20:46

2 respuestas

La mejor respuesta

Podrías hacerlo:

d = {}
for i in results:
   if not d.get(i[0],0):
      d[i[0]] = {}
   if not d[i[0]].get(i[3],0):
      d[i[0]][i[3]] = []
   d[i[0]][i[3]].append(i[4])
d
{'abc': {'qwe': ['asd', '123'], 'ewq': ['zxc']}, 'bcd': {'ewq': ['zxc', 'zxc']}}
1
Onyambu 13 feb. 2020 a las 20:36

La siguiente es una solución a su pregunta inmediata con tuplas en la lista:

from collections import defaultdict
report_dict = defaultdict(list)
# results = self.report_data(conn)
results = [["abc",123,1123,"qwe", "asd"],["abc",123,1123,"ewq","zxc"], ["bcd",123,1123,"ewq","zxc"], ["bcd",123,1123,"ewq","zxc"]]
for row in results:
    try:
        report_dict[row[0]].append((row[3], row[1]))
    except IndexError:
        None 
print(report_dict)

Resultado: defaultdict(<class 'list'>, {'abc': [('qwe', 123), ('ewq', 123)], 'bcd': [('ewq', 123), ('ewq', 123)]})

También puede cambiarlo a un diccionario en la lista con la siguiente línea

        report_dict[row[0]].append({row[3]: row[1]})

Resultado: defaultdict(<class 'list'>, {'abc': [{'qwe': 123}, {'ewq': 123}], 'bcd': [{'ewq': 123}, {'ewq': 123}]})

1
fabianegli 13 feb. 2020 a las 18:25