Python遍历值为列表的字典,将对应key存入以值命名的列表问题
问题原因
- 你的变量
N在第一次遍历字典第一个键的内层while循环结束后就已经被累加到了12,后续遍历其他键时,N < Max_No的条件始终不成立,内层循环完全不会执行,自然不会往其他列表里添加内容。 - 额外提示:不推荐直接操作
locals()动态创建变量,后续维护难度很高,用一个新字典存储生成的列表会更安全易读。
最小改动修复代码(保留你原有写法逻辑)
# 注意原字典的键要加引号,否则会被识别为未定义变量 Dict = {"keyA":[1, 3, 2], "keyB":[2, 3, 4], "keyC":[1,4,3]} Max_No = 12 N = 0 while N < Max_No: N = N + 1 locals()["list"+str(N)] = [] for key, value in Dict.items(): # 每次处理新的键时重置N,才能重新走完整的数字匹配逻辑 N = 0 while N < Max_No: N = N + 1 if N in value: locals()["list"+str(N)].append(key)
更推荐的实现方案(无需操作locals,可维护性更高)
Dict = {"keyA":[1, 3, 2], "keyB":[2, 3, 4], "keyC":[1,4,3]} Max_No = 12 # 用result字典存储结果,键为数字,值为对应的原字典键列表 result = {i:[] for i in range(1, Max_No+1)} for key, val_lst in Dict.items(): for num in val_lst: if num <= Max_No: result[num].append(key) # 调用方式和你之前的动态变量完全兼容,result[1]等价于之前的list1 print(result[1]) # 输出 ['keyA', 'keyC'] print(result[2]) # 输出 ['keyA', 'keyB'] print(result[3]) # 输出 ['keyA', 'keyB', 'keyC']
内容的提问来源于stack exchange,提问作者FrustratedApe
相关产品推荐
相关产品推荐

