You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何从含嵌套列表的字典中解包xs和ys值?

解决嵌套列表字典的解包问题

你的问题是字典每个键对应的值都是嵌套列表(每个值包含多个二元子列表),要把所有子列表的第一个元素汇总成xs,第二个元素汇总成ys。原来适用于单列表的解包方法没法直接用,我们得先把嵌套的子列表全部展开,再进行解包操作。

方法一:生成器展开+zip解包

先用生成器表达式把所有内层的二元子列表提取出来,再用zip(*...)完成解包,最后转成列表(如果需要的话):

test = {1092268: [[81, 90], [78, 90]], 524292: [[80, 80], [65, 78]], 892456: [[88, 81], [81, 88]]}

# 生成器展开所有嵌套的二元子列表
all_pairs = (pair for sublist in test.values() for pair in sublist)
# 解包得到元组,转成列表
xs, ys = map(list, zip(*all_pairs))

print(xs)  # [81, 78, 80, 65, 88, 81]
print(ys)  # [90, 90, 80, 78, 81, 88]

方法二:列表推导式直接收集元素

如果觉得生成器不够直观,也可以用双层列表推导式分别收集xs和ys:

test = {1092268: [[81, 90], [78, 90]], 524292: [[80, 80], [65, 78]], 892456: [[88, 81], [81, 88]]}

xs = [pair[0] for sublist in test.values() for pair in sublist]
ys = [pair[1] for sublist in test.values() for pair in sublist]

print(xs)  # [81, 78, 80, 65, 88, 81]
print(ys)  # [90, 90, 80, 78, 81, 88]

为什么原来的方法不适用?

原来的xs, ys = zip(*test.values())只适用于每个字典值是单个二元列表的场景(比如test = {1: [1,2], 2: [3,4]})。但你的字典值是嵌套列表,test.values()返回的是[[[81,90], [78,90]], [[80,80], [65,78]], ...],直接zip(*...)会把每个外层列表作为一个元素来配对,得到的是两组嵌套列表,完全不符合你的需求。所以必须先把所有内层的二元子列表提取出来,再进行解包。

内容的提问来源于stack exchange,提问作者B Furtado

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:06:08