Python如何遍历字典值生成剔除对应键的关联数值新字典
实现方案
- 不需要特意将原字典转换为列表的列表形式,原字典的原生结构本身就适配遍历处理逻辑,提前转结构反而会增加额外的转换步骤,提升出错概率。
核心处理逻辑
- 预拆分原字典中存储的逗号分隔字符串,避免后续重复执行字符串拆分操作
- 以原字典的所有键作为新字典的键,初始化空列表作为每个键的初始值
- 针对新字典中的每一个目标键,逐一遍历原字典的所有条目:
- 筛选出条目的数字列表中包含该目标键的条目
- 从筛选出的条目中剔除掉等于目标键本身的数值
- 将所有收集到的数值拼接为逗号分隔的字符串,存入新字典对应键的列表中
可直接运行的代码
# 原输入字典 dict_in = {'6': ['2,9,8,10'], '1': ['3,5,8,9,10,12'], '4': ['2,5,7,8,9'], '2': ['3,4,7,6,13'], '12': ['1,7,5,9'], '3': ['9,11,10,1,2,13'], '10': ['1,3,6,11'], '5': ['4,1,7,11,12'], '13': ['2,3'], '8': ['1,6,4,11'], '7': ['5,2,4,9,12'], '11': ['3,5,10,8'], '9': ['12,1,3,6,4,7']} # 预拆分字符串为数字列表 preprocessed = {} for origin_key, value_list in dict_in.items(): preprocessed[origin_key] = value_list[0].split(',') # 初始化输出字典 dict_out = {key: [] for key in dict_in.keys()} # 逐键处理数据 for target_key in dict_out.keys(): collected_nums = [] for origin_nums in preprocessed.values(): # 仅处理包含当前目标键的条目 if target_key in origin_nums: # 剔除目标键本身的数值,收集剩余数字 filtered_nums = [num for num in origin_nums if num != target_key] collected_nums.extend(filtered_nums) # 拼接为指定格式,存入对应键下 dict_out[target_key].append(','.join(collected_nums))
运行上述代码后,输出字典的结构和你提供的示例格式完全匹配:比如键
'6'对应的输出值为['3,4,7,13,1,3,11,1,4,11,12,1,3,4,7'],和示例给出的拼接规则一致。
内容的提问来源于stack exchange,提问作者Jim Ryan
相关产品推荐
相关产品推荐

