如何通过字典映射更新包含嵌套列表的字典的对应元素
问题修正方案
现有代码的错误点
- 语法错误:
network_values定义末尾的'Écran mobile 74缺少闭合单引号,运行会直接报语法错误。 - 逻辑错误:直接把
theater_values的值(完整嵌套列表)和network_values的字符串值做相等判断,不可能匹配成功。 - 逻辑错误:即使匹配成功,你是直接把整个嵌套列表替换成了键的字符串,而不是仅替换列表中匹配到的对应元素。
优化实现思路
先将network_values的键值反转生成查找映射字典,不用嵌套循环遍历查找,效率更高。再遍历theater_values的每个嵌套列表,逐个判断元素是否需要替换。
正确可运行代码
def proto_csv(theater_values): network_values = { 0: "CGR cinémas", 1: "Ville de Choisy-le-Roi", 2: "Pathé Gaumont", 3: "UGC", 4: "Cinéode", 5: "Magestic", 6: "Cinéville", 7: "cinebus", 8: "CGR", 9: "Utopia", 10: "Écran mobile 74" } # 反转键值生成查找表 network_lookup = {value: str(key) for key, value in network_values.items()} # 遍历每个影院的属性列表 for theater_id, attr_list in theater_values.items(): # 遍历属性列表的每个元素 for index, attr in enumerate(attr_list): # 匹配到对应值则替换 if attr in network_lookup: attr_list[index] = network_lookup[attr] return theater_values
结果说明
运行后输出的theater_values符合需求,你给出的预期示例存在两处笔误:
- 键为
"10"的列表最后一个元素Ville de Choisy-le-Roi会被替换为"1" - 键为
"11"的列表最后一个元素Pathé Gaumont会被替换为"2"
内容的提问来源于stack exchange,提问作者Andy K
相关产品推荐
相关产品推荐

