如何将Python字典中的嵌套值展平为一维列表?
如何把字典值的嵌套列表转成一维列表
你需要的是把字典值里的多个子列表合并成一个单一的一维列表对吧?这里有几种简单好用的实现方式:
方式一:循环拼接(直观易懂)
最直接的思路就是先建一个空列表,然后遍历字典的每个值(每个值都是子列表),把每个子列表里的元素都加到结果里:
d = {1:['x','y'], 2: ['a','b']} flat_list = [] for sublist in d.values(): flat_list.extend(sublist) print(flat_list) # 输出: ['x', 'y', 'a', 'b']
这里一定要用extend()而不是append()哦——append()会把整个子列表当成一个元素塞进去,而extend()是把子列表里的元素逐个添加到结果列表中,刚好符合你的需求。
方式二:列表推导式(简洁一行)
如果喜欢更紧凑的代码,用列表推导式可以一行搞定:
d = {1:['x','y'], 2: ['a','b']} flat_list = [item for sublist in d.values() for item in sublist] print(flat_list) # 输出: ['x', 'y', 'a', 'b']
这个写法其实就是把上面的循环逻辑压缩成了一行,熟悉列表推导式的话读起来也很清晰。
方式三:用itertools.chain(高效省内存)
如果你的字典很大,或者不想一次性生成整个列表(想要迭代器的话),可以用itertools模块里的chain工具:
import itertools d = {1:['x','y'], 2: ['a','b']} flat_list = list(itertools.chain.from_iterable(d.values())) print(flat_list) # 输出: ['x', 'y', 'a', 'b']
chain.from_iterable()会自动把嵌套的可迭代对象(这里就是每个子列表)展开,返回一个迭代器,最后转成列表就得到你要的结果了,这种方式在处理大数据时内存效率更高。
方式四:解包+itertools.chain(另一种简洁写法)
还有一种类似的写法,用*把d.values()里的子列表都解包成chain的参数:
import itertools d = {1:['x','y'], 2: ['a','b']} flat_list = list(itertools.chain(*d.values())) print(flat_list) # 输出: ['x', 'y', 'a', 'b']
这个和方式三本质是一样的,只是写法不同,看你个人习惯选就行。
选哪种方式都能轻松得到你想要的一维列表~
内容的提问来源于stack exchange,提问作者shweta




