как объединить список списков вложенного словаря - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть такой словарь:

{'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]}}

Я хочу получить объединенный список всех списков во вложенном словаре.

Вывод должен быть таким:

[55111491410,55111400572,55111186735,55111438755,55111281815,55111461870,55111167133,55111167139,....55111403171,55111461858]

Ответы [ 3 ]

0 голосов
/ 08 сентября 2018

xПростое понимание списка, использующее значения dict и внутренние значения dict, сделало бы эту работу.Но помните, что дикты не упорядочены в python до 3.6Так что, если вы используете более старую версию, результирующий список также будет не в любом порядке

>>> 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]
0 голосов
/ 08 сентября 2018

Элегантный ответ, основанный на регулярном выражении и на том факте, что все представляющие интерес значения заключены в квадратные скобки

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))))

выход

[55111491410, 55111400572, 55111186735, 55111438755, 55111281815, 55111461870, 55111161462, 55111128782, 55111167133, 55111167139, 55111167140, 55111226912, 55111226914, 55111226916, 55111403171, 55111461858]
0 голосов
/ 08 сентября 2018
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)

выход:

[55111491410, 55111400572, 55111186735, 55111438755, 55111281815, 55111461870, 55111161462, 55111128782, 55111167133, 55111167139, 55111167140, 55111226912, 55111226914, 55111226916, 55111403171]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...