如何在Python 2.7x中展开嵌套字典

3

我有一个嵌套的字典,看起来像下面这样。如何将其扁平化,使每个底层作为列表的一行成为一个列表?

e.g

 [[en,Chome,ChromeOS,null,180, '0', '0', '0', '0',
  [en, Linux,null,27868, '0', '0', '0', '0'],
  ...
 ]
test = {u'en': {'Chrome': {'ChromeOS': {u'null': [180, '0', '0', '0', '0']},
                    'Linux': {u'null': [27868, '0', '0', '0', '0']},
                    'Macintosh': {u'null': [330991, '0', '0', '0', '0']},
                    'Windows': {u'null': [3296819, '0', '0', '0', '0']}},
         'Firefox': {'Linux': {u'null': [18076, '0', '0', '0', '0']},
                     'Macintosh': {u'null': [168444, '0', '0', '0', '0']},
                     'Windows': {u'null': [1517775, '0', '0', '0', '0']}},
         'Konqueror': {'Linux': {u'null': [9, '0', '0', '0', '0']}},
         'Microsoft Internet Explorer': {'Windows': {u'null': [3060154,
                                                               '0',
                                                               '0',
                                                               '0',
                                                               '0']}},
         'Opera': {'Linux': {u'null': [2274, '0', '0', '0', '0']},
                   'Macintosh': {u'null': [1573, '0', '0', '0', '0']},
                   'Windows': {u'null': [38589, '0', '0', '0', '0']}},
         'Opera Mobile': {'Linux': {u'null': [5807, '0', '0', '0', '0']},
                          'Windows': {u'null': [1, '0', '0', '0', '0']}},
         'Safari': {'Blackberry': {u'null': [530, '0', '0', '0', '0']},
                    'Linux': {u'null': [292862, '0', '0', '0', '0']},
                    'Macintosh': {u'null': [618641, '0', '0', '0', '0']},
                    'Windows': {u'null': [36359, '0', '0', '0', '0']}},
         'SeaMonkey': {'Linux': {u'null': [120, '0', '0', '0', '0']},
                       'Macintosh': {u'null': [224, '0', '0', '0', '0']},
                       'Windows': {u'null': [1890, '0', '0', '0', '0']}},
         'WOSBrowser': {'Linux': {u'null': [687, '0', '0', '0', '0']}},
         'null': {'null': {u'null': [15559, '0', '0', '0', '0']}}}}
2个回答

9
def flatten_dict(d):
    for k,v in d.items():
        if isinstance(v, dict):
            for item in flatten_dict(v):
                yield [k]+item
        else:
            yield v

flattened = list(flatten_dict(test))

0
如果终端节点不是列表,则应该使用“yield [v]”而不是“yield v”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接