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。你不需要一次列出所有的清单。

10-01 21:47