Python从字典列表值生成一维值列表失败,问题出在哪?
问题描述
我在Python中定义了如下字典:
my_dict = dict({'98:1E:19:7E:8F:30': ['SAGEMCOM BROADBAND SAS', '22'], '98:1E:19:7E:8F:32': ['SAGEMCOM BROADBAND SAS1']})
我希望生成包含所有值的一维列表,于是尝试了以下列表推导式:
[[sub_val for sub_val in val] for val in my_dict.values()]
但得到的结果是嵌套列表:
[['SAGEMCOM BROADBAND SAS', '22'], ['SAGEMCOM BROADBAND SAS1']]
而我想要的是一维列表:
['SAGEMCOM BROADBAND SAS', '22', 'SAGEMCOM BROADBAND SAS1']
请问我写的代码哪里有问题?
解决方案
你写的列表推导式多嵌套了一层列表结构。外层的[... for val in my_dict.values()]会把每个内层推导的结果(也就是每个子列表)作为元素放进新列表,自然就形成了嵌套结构。
要生成一维列表,只需要把两层循环合并到同一层级的推导里:
[sub_val for val in my_dict.values() for sub_val in val]
这个写法等价于:
result = [] for val in my_dict.values(): for sub_val in val: result.append(sub_val)
另外还有两种常用方法可以实现需求:
- 使用
itertools.chain,它能直接把多个可迭代对象拼接成一个迭代器,再转成列表:
from itertools import chain list(chain.from_iterable(my_dict.values()))
- 先初始化空列表,再逐个extend子列表:
result = [] for val in my_dict.values(): result.extend(val)
内容的提问来源于stack exchange,提问作者zoro
相关产品推荐
相关产品推荐

