expected = {
'l1': ['abc', 'def', 'ghi', 'jkl'],
'l2': ['abc', 'ghi', 'jkl', 'mno']
}
我想使用Python2.6+获得
set(['abc', 'def', 'ghi', 'jkl', 'mno'])
(因此{x for x in ...}
不是我想要的)。我试过了
all_files = set(files for files in expected.values())
但它抛出:
TypeError: unhashable type: 'list'
最佳答案
>>> expected = {
... 'l1': ['abc', 'def', 'ghi', 'jkl'],
... 'l2': ['abc', 'ghi', 'jkl', 'mno']
... }
>>> set(f for files in expected.itervalues() for f in files)
set(['jkl', 'abc', 'ghi', 'def', 'mno'])
或使用
itertools.chain.from_iterable
:>>> from itertools import chain
>>> set(chain.from_iterable(expected.itervalues()))
set(['jkl', 'abc', 'ghi', 'def', 'mno'])
顺便说一下,用
dict.itervalues
代替dict.values
。你不需要一次列出所有的清单。