如何根据列表索引更新字典的键
解决字典键替换为列表对应索引的问题
最简实现:字典推导式
直接通过字典推导式生成目标字典,代码简洁高效:
list_1 = ['item 0', 'item 1', 'item 2', 'item 3', 'item 4', 'item 5', 'item 6'] dic_1 = {'item 3': 'val 3', 'item 1': 'val 1', 'item 5': 'val 5'} # 遍历原字典键值对,用列表索引替换原键 dic_1 = {list_1.index(key): value for key, value in dic_1.items()} print(dic_1) # 输出: {3: 'val 3', 1: 'val 1', 5: 'val 5'}
原代码问题分析
你写的代码逻辑存在两处关键错误:
dic_1[column[0]]取的是列表元素的第一个字符(比如'item 3'的第一个字符是'i'),并非你需要的列表索引dic_1.pop(list(dic_1.keys())[0])每次弹出的是字典的第一个键(Python3.7+按插入顺序),不是当前匹配的column对应的键,导致替换逻辑完全错误
另一种方式:修改原字典(不生成新字典)
如果需要直接修改原字典而非生成新字典,可以先收集需要替换的键值对,再批量处理:
list_1 = ['item 0', 'item 1', 'item 2', 'item 3', 'item 4', 'item 5', 'item 6'] dic_1 = {'item 3': 'val 3', 'item 1': 'val 1', 'item 5': 'val 5'} # 先收集旧键和对应的新索引,避免遍历字典时修改结构引发异常 replace_pairs = [] for key in dic_1: if key in list_1: idx = list_1.index(key) replace_pairs.append((key, idx)) # 批量替换键 for old_key, new_key in replace_pairs: dic_1[new_key] = dic_1.pop(old_key) print(dic_1) # 输出: {3: 'val 3', 1: 'val 1', 5: 'val 5'}
内容的提问来源于stack exchange,提问作者sonny
相关产品推荐
相关产品推荐

