Python如何实现将字典的键替换为对应值列表的长度
字典键与值列表长度匹配实现方案
问题说明
现有原始字典结构如下:
{ 1: ['A', 'B', 'C', 'D', 'E'], 2: ['B', 'C', 'E', 'AD'], 3: ['E', 'AD', 'BC'], 4: ['BC', 'EAD'], 5: ['BCEAD'] }
需求为调整字典键值映射关系,让每个键的数值等于对应值列表的长度,最终得到目标结构如下:
{ 5: ['A', 'B', 'C', 'D', 'E'], 4: ['B', 'C', 'E', 'AD'], 3: ['E', 'AD', 'BC'], 2: ['BC', 'EAD'], 1: ['BCEAD'] }
实现逻辑
观察原始数据特征:所有值列表的长度为1-5的不重复整数,不需要修改列表内的元素,只需要重新建立键值映射:遍历原始字典的所有值列表,以列表的实际长度作为新字典的键,列表本身作为对应值即可。
基础循环实现
可读性更强,适合新手理解:
# 定义原始字典 origin = {1:['A', 'B', 'C', 'D', 'E'] , 2:['B', 'C', 'E', 'AD'] , 3:['E', 'AD', 'BC'] , 4:['BC', 'EAD'] , 5:['BCEAD']} target = {} for val_list in origin.values(): # 取列表实际长度作为新键 new_key = len(val_list) target[new_key] = val_list
字典推导式简洁实现
代码更精简,适合熟练场景使用:
origin = {1:['A', 'B', 'C', 'D', 'E'] , 2:['B', 'C', 'E', 'AD'] , 3:['E', 'AD', 'BC'] , 4:['BC', 'EAD'] , 5:['BCEAD']} target = {len(val_list): val_list for val_list in origin.values()}
运行上述任意一段代码,得到的target字典结构和预期完全一致。该方案不依赖原始字典的键顺序、也不需要硬编码键值,后续如果新增其他长度的值列表,也能自动完成映射。
内容的提问来源于stack exchange,提问作者alireza
相关产品推荐
相关产品推荐

