嵌套列表推导与条件

时间:2017-07-25 04:13:24

标签: python

假设有一个字典中包含与列表混合的字符串:

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]

3 个答案:

答案 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']