Tengo un diccionario como este:

{'CO,': {u'123456': [55111491410]},
 u'OA,': {u'3215': [55111400572]},
 u'KO,': {u'asdas': [55111186735],u'5541017924': [55111438755]},
 u'KU': {u'45645': [55111281815],u'546465238': [55111461870]},
 u'TU': {u'asdfds': [55111161462],u'546454149': [55111128782],
  u'546454793': [55111167133],u'546456387': [55111167139],
  u'546456925': [55111167140],u'546458931': [55111226912],
  u'546458951': [55111226914],u'546459861': [55111226916],
  u'546460165': [55111403171, 55111461858]}}

Quiero obtener una lista combinada de todas las listas en el diccionario anidado.

La salida debería ser así:

[55111491410,55111400572,55111186735,55111438755,55111281815,55111461870,55111167133,55111167139,....55111403171,55111461858]
-4
Muhammad Waleed 8 sep. 2018 a las 10:51

3 respuestas

La mejor respuesta

Una respuesta elegante basada en expresiones regulares y en el hecho de que todos los valores de interés están entre corchetes

import re

pat = r'(?<=\[).+?(?=\])'

s = """{'CO,': {u'123456': [55111491410]},
 u'OA,': {u'3215': [55111400572]},
 u'KO,': {u'asdas': [55111186735],u'5541017924': [55111438755]},
 u'KU': {u'45645': [55111281815],u'546465238': [55111461870]},
 u'TU': {u'asdfds': [55111161462],u'546454149': [55111128782],
  u'546454793': [55111167133],u'546456387': [55111167139],
  u'546456925': [55111167140],u'546458931': [55111226912],
  u'546458951': [55111226914],u'546459861': [55111226916],
  u'546460165': [55111403171, 55111461858]}}"""

print('[%s]' % ', '.join(map(str, re.findall(pat, s))))

Salida

[55111491410, 55111400572, 55111186735, 55111438755, 55111281815, 55111461870, 55111161462, 55111128782, 55111167133, 55111167139, 55111167140, 55111226912, 55111226914, 55111226916, 55111403171, 55111461858]
2
Antonino 8 sep. 2018 a las 08:27
d = {'CO,': {u'123456': [55111491410]},
     u'OA,': {u'3215': [55111400572]},
     u'KO,': {u'asdas': [55111186735], u'5541017924': [55111438755]},
     u'KU': {u'45645': [55111281815], u'546465238': [55111461870]},
     u'TU': {u'asdfds': [55111161462], u'546454149': [55111128782],
             u'546454793': [55111167133], u'546456387': [55111167139],
             u'546456925': [55111167140], u'546458931': [55111226912],
             u'546458951': [55111226914], u'546459861': [55111226916],
             u'546460165': [55111403171, 55111461858]}}
z = []
for i in d.keys():
    for j in d[i].keys():
        z.append(d[i][j][0])

print(z)

salida:

[55111491410, 55111400572, 55111186735, 55111438755, 55111281815, 55111461870, 55111161462, 55111128782, 55111167133, 55111167139, 55111167140, 55111226912, 55111226914, 55111226916, 55111403171]
0
Nihal 8 sep. 2018 a las 08:07

XSolo una lista de comprensión usando los valores del dict y los valores internos del dict harían el trabajo. Pero recuerde que los dictados no se ordenan en Python hasta 3.6. Entonces, si está utilizando la versión anterior, la lista resultante tampoco estaría en ningún orden

>>> dct = {'CO,': {u'123456': [55111491410]},
...  u'OA,': {u'3215': [55111400572]},
...  u'KO,': {u'asdas': [55111186735],u'5541017924': [55111438755]},
...  u'KU': {u'45645': [55111281815],u'546465238': [55111461870]},
...  u'TU': {u'asdfds': [55111161462],u'546454149': [55111128782],
...   u'546454793': [55111167133],u'546456387': [55111167139],
...   u'546456925': [55111167140],u'546458931': [55111226912],
...   u'546458951': [55111226914],u'546459861': [55111226916],
...   u'546460165': [55111403171, 55111461858]}}
>>> 
>>> [e for idct in dct.values() for lst in idct.values() for e in lst]
[55111491410, 55111400572, 55111186735, 55111438755, 55111281815, 55111461870, 55111161462, 55111128782, 55111167133, 55111167139, 55111167140, 55111226912, 55111226914, 55111226916, 55111403171, 55111461858]
1
Sunitha 8 sep. 2018 a las 08:08