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

如何用Pythonic方式提取defaultdict中各列表的第n个元素到新数组?

Pythonic提取defaultdict中每个列表的第n个元素

当然有啦!Python里处理这种需求的Pythonic方式非常简洁直观,最常用也最推荐的就是列表推导式,完全符合Python“简洁可读”的风格。

先给你举个实际的例子:
首先我们先创建一个示例的defaultdict(list):

from collections import defaultdict

# 构造示例数据
my_defaultdict = defaultdict(list)
my_defaultdict['first'] = [10, 20, 30]
my_defaultdict['second'] = [40, 50, 60]
my_defaultdict['third'] = [70, 80, 90]

假设你要提取每个列表的第2个元素(注意Python是0索引,所以对应索引为1),直接用列表推导式就能搞定:

target_index = 1  # 对应第2个元素
result = [lst[target_index] for lst in my_defaultdict.values()]
# 输出结果:[20, 50, 80]

处理边界情况

如果你的defaultdict里可能存在长度不足的列表(比如某个列表没有第n个元素),直接索引会抛出IndexError,这时候可以加个条件判断,给这类情况设置默认值:

target_index = 1
# 长度不够时默认返回None,你也可以换成其他值比如0或者空字符串
result = [lst[target_index] if len(lst) > target_index else None for lst in my_defaultdict.values()]

另一种方式:用map+itemgetter

如果你偏爱函数式编程风格,也可以用operator.itemgetter配合map来实现,不过可读性稍弱一点:

from operator import itemgetter

target_index = 1
result = list(map(itemgetter(target_index), my_defaultdict.values()))

总的来说,列表推导式是最Pythonic的选择,代码简洁、逻辑清晰,一眼就能看懂要做什么。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:25:45