如何在一行中打印字典里具有相同值的不同键
解决方案:按字典值分组键并格式化输出
这问题我之前也碰到过,核心就是把字典里值相同的键归到一起,再按要求拼接成字符串对吧?下面给你两种实现方式,都能得到你想要的输出:
方式一:用collections.defaultdict简化分组
这种方式代码更简洁,借助Python标准库的defaultdict来自动处理列表的初始化:
from collections import defaultdict example = {'a': 10, 'b': 12, 'c': 10, 'd': 12} # 第一步:按值分组键 value_group = defaultdict(list) for key, val in example.items(): value_group[val].append(key) # 第二步:拼接成目标格式 output_segments = [] for val, keys in value_group.items(): output_segments.append(f"{val} {', '.join(keys)}") # 最后合并所有片段 final_output = ' '.join(output_segments) print(final_output) # 输出:10 a, c 12 b, d
方式二:不用标准库,纯基础字典实现
如果不想引入额外模块,用普通字典也能搞定,就是多一步判断键是否存在的操作:
example = {'a': 10, 'b': 12, 'c': 10, 'd': 12} value_group = {} for key, val in example.items(): if val not in value_group: value_group[val] = [] value_group[val].append(key) # 生成输出字符串的逻辑和上面一致 output_segments = [f"{val} {', '.join(keys)}" for val, keys in value_group.items()] print(' '.join(output_segments))
调整输出顺序(可选)
上面的代码输出顺序可能会和示例略有不同(Python 3.7+字典才保序),如果你想严格按照示例里值从大到小的顺序输出,可以在遍历分组后的字典时加上排序:
# 按值降序排序后遍历 for val, keys in sorted(value_group.items(), key=lambda x: -x[0]): output_segments.append(f"{val} {', '.join(keys)}") print(' '.join(output_segments)) # 输出:12 b, d 10 a, c
这样就完全匹配你想要的格式啦!
内容的提问来源于stack exchange,提问作者Lairum
相关产品推荐
相关产品推荐

