假设有一个字典中包含与列表混合的字符串:
dictionary = {'item_a': 'one',
'item_b': 'two',
'item_c': ['three', 'four'],
'item_d': 'five'}
,结果应为:
['one', 'two', 'three', 'four', 'five']
如何通过使用列表理解来实现?
以下仅给出列表的值,但它缺少不是列表的字符串,如果在if:
之后添加,则不起作用[val for sublist in dictionary.values() if type(sublist) is list for val in sublist]
答案 0 :(得分:2)
这很有效,但它并不漂亮。如果子列表不是列表,则将其转换为单元素列表。
[val for sublist in dictionary.values() for val in (sublist if type(sublist) is list else [sublist])]
答案 1 :(得分:2)
一种方法是将所有值规范化为迭代,并使用intertools.chain组合结果,例如
get/setSize
这样做是将所有非列表转换为元组(例如可迭代),然后使用链组合所有迭代,最后列出为您提供列表。
如果您不想复制,请使用set而不是列表。
答案 2 :(得分:0)
我不知道这有多大用处,但是,如果你坚持以压缩形式使用它,请尝试:
[m for n in [[i] for i in dictionary.values() if not list(i)==i ]+[i for i in dictionary.values() if list(i)==i ] for m in n]
你会得到:
['one', 'two', 'five', 'three', 'four']