python set comprehension由不同的列表组成

时间:2014-02-26 09:11:37

标签: python set python-2.6

expected = {
    'l1': ['abc', 'def', 'ghi', 'jkl'],
    'l2': ['abc', 'ghi', 'jkl', 'mno']
}

我想使用python 2.6+获取set(['abc', 'def', 'ghi', 'jkl', 'mno'])(所以{x for x in ...}不是我想要的。)

我试过

all_files = set(files for files in expected.values())

但它会抛出:

TypeError: unhashable type: 'list'

2 个答案:

答案 0 :(得分:7)

>>> 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'])

BTW,使用dict.itervalues代替dict.values。您不需要一次列出所有列表。

答案 1 :(得分:0)

set(sum(expected.values(),[]))

将获得以下结果: set(['jkl','abc','ghi','def','mno'])

由于您的预期设定,请忘记订单