如何用Python按子列表中间值构建特定格式的字典?
按子列表中间值分组构建字典的实现方法
嗨,这个需求其实很容易实现,我给你两种实用的写法:
方法一:基础循环判断
这是最直观的方式,手动处理字典的键是否存在:
a = [[1,2,3], [4,2,7], [5,2,3], [7,8,5]] b = {} # 遍历每个子列表 for sublist in a: # 取子列表的中间值(因为你的子列表都是3个元素,所以索引1就是中间项) key = sublist[1] # 如果键已存在,就把当前子列表追加到对应列表里 if key in b: b[key].append(sublist) # 如果键不存在,就创建新的键值对,值是包含当前子列表的列表 else: b[key] = [sublist] print(b) # 输出结果:{2: [[1, 2, 3], [4, 2, 7], [5, 2, 3]], 8: [[7, 8, 5]]}
方法二:用collections.defaultdict简化代码
Python的标准库collections里的defaultdict可以帮我们省去判断键是否存在的步骤,代码更简洁:
from collections import defaultdict a = [[1,2,3], [4,2,7], [5,2,3], [7,8,5]] # 初始化一个默认值为列表的字典 b = defaultdict(list) for sublist in a: # 直接往对应键的列表里追加元素就行,不用管键是否存在 b[sublist[1]].append(sublist) # 如果你需要把defaultdict转换成普通字典(可选操作) b = dict(b) print(b)
拓展小提示
如果你的子列表长度不固定(比如不是都为3),可以用len(sublist)//2来计算中间元素的索引,这样代码更通用:
key = sublist[len(sublist) // 2]
内容的提问来源于stack exchange,提问作者kazetsuki
相关产品推荐
相关产品推荐

