说我有一个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的键始终是唯一的。
答案 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']