是否可以使用列表推导从dicts的词典创建所有成员dict键的列表?

时间:2016-12-20 21:17:15

标签: python list-comprehension python-3.5

说我有一个dicts的词典:

threading

要获得member-dicts中所有键的单个列表,我有如下函数:

foo = {
    'category': {
        'key1': 'bar',
        'key2': 'bar',
        'key3': 'bar',
    },
    'category2': {
        'key4': 'bar',
        'key5': 'bar',
    },
}

生成的列表如下所示:def _make_list(): baz = list() for key,val in foo.items(): baz += list(val.keys()) return baz

这很简单,但它确实有效,但我想知道:有没有办法通过单行列表理解来实现这一目标?成员dicts的键始终是唯一的。

2 个答案:

答案 0 :(得分:12)

这是一种方法:

>>> [k for d in foo.values() for k in d]
['key1', 'key2', 'key3', 'key4', 'key5']

答案 1 :(得分:3)

方法是使用itertools.chain()

import itertools

[k for k in itertools.chain(*(d.keys() for d in foo.values()))]

如果您想要的只是一行代码,而不一定是列表理解,您也可以尝试(由@Duncan提及):

list(itertools.chain(*foo.values()))

<强>输出:

>>> [k for k in itertools.chain(*(d.keys() for d in foo.values()))]
['key3', 'key2', 'key1', 'key5', 'key4']
>>>
>>> list(itertools.chain(*foo.values()))
['key3', 'key2', 'key1', 'key5', 'key4']