如何用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
相关产品推荐
相关产品推荐

