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'
答案 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'])
由于您的预期设定,请忘记订单