如何编写单一Python函数遍历键为单元素/多元素元组的两类字典
问题根因
你遇到的报错和遍历逻辑无关,for key, values in h.items()本身可以兼容任意类型的字典键,报错是%字符串格式化的语法特性导致的:当%右侧的参数是元组时,Python会自动把元组的每个元素拆成独立的格式化参数,你的字符串里只有1个%s占位符,当键是长度大于1的元组时就会出现参数不匹配的错误。
解决方案
版本1:通用兼容版
直接使用f-string(或显式调用str()转换键),自动适配所有类型的键,输出键的原生表示:
def print_hash(h, desc): "display a hash's keys and each key's values" print(f'----- start: {desc}') for key, values in h.items(): print(f'key: {key}') for v in values: print(f'\t{v}') print(f'----- end: {desc}')
打印d1时输出格式为key: a,打印d2时输出格式为key: ('a', 100),全程无报错。
版本2:适配自定义格式版
如果需要和你手写的d2打印效果一致(元组键用/分隔元素),可以增加类型判断逻辑:
def print_hash(h, desc): "display a hash's keys and each key's values" print(f'----- start: {desc}') for key, values in h.items(): if isinstance(key, tuple): key_str = ' / '.join(map(str, key)) else: key_str = str(key) print(f'key: {key_str}') for v in values: print(f'\t{v}') print(f'----- end: {desc}')
打印d2时输出格式为key: a / 100,和你手动遍历d2的效果完全一致,同时兼容d1的打印需求。
内容的提问来源于stack exchange,提问作者JSJ
相关产品推荐
相关产品推荐

