如何基于列表索引从已有字典生成链式映射的新字典?
Python字典链式映射转换实现
原字典
dic = { 'I2a1a': ['I2a1a2', 'I2a1a2a', 'I2a1a2a1a2'], 'I2a1b': ['I2a1b1a1a1b1a'], 'I2a1b2': ['I2a1b2a'] }
目标字典
new_dic = { 'I2a1a': 'I2a1a2', 'I2a1a2': 'I2a1a2a', 'I2a1a2a': 'I2a1a2a1a2', 'I2a1b': 'I2a1b1a1a1b1a', 'I2a1b2': 'I2a1b2a' }
转换规则
- 原字典键对应的值列表长度为1时,直接将原键与该元素建立映射
- 列表长度大于1时:
- 原键对应列表第一个元素
- 列表中除最后一个元素外,每个元素作为新键,对应列表中索引+1的元素
实现代码
dic = { 'I2a1a': ['I2a1a2', 'I2a1a2a', 'I2a1a2a1a2'], 'I2a1b': ['I2a1b1a1a1b1a'], 'I2a1b2': ['I2a1b2a'] } new_dic = {} for key, values in dic.items(): # 建立原键与列表首个元素的映射 new_dic[key] = values[0] # 遍历列表,建立元素间的链式映射 for idx in range(len(values) - 1): new_dic[values[idx]] = values[idx + 1] # 验证结果 print(new_dic)
代码说明
- 初始化空字典
new_dic用于存储结果 - 遍历原字典的每一组键值对
- 先将原键与列表第一个元素的映射加入新字典
- 再遍历列表的前
len(values)-1个元素,依次将当前元素与下一个元素建立映射 - 最终得到符合要求的链式映射字典
内容的提问来源于stack exchange,提问作者Pierre
相关产品推荐
相关产品推荐

