Python嵌套字典推导式添加条件:解决字符串遍历错误问题
解决字典推导式中字符串被拆分遍历的问题
给定字典:
d = {'int': ["unit", "bool"], 'timestamp': "pruct"}
如果直接用嵌套字典推导式反转键值:
# 错误写法 wrong_result = {v: k for k, vals in d.items() for v in vals}
会得到错误结果——因为字符串"pruct"会被当作可迭代对象逐个字符遍历,输出类似:
{'u': 'int', 'n': 'int', 'i': 'int', 't': 'int', 'b': 'int', 'o': 'int', 'l': 'int', 'p': 'timestamp', 'r': 'timestamp', 'c': 'timestamp', 't': 'timestamp'}
正确解法
在遍历值之前添加条件判断:如果值是字符串,就把它转为单元素列表;如果是列表这类可迭代对象,直接使用。对应的推导式如下:
d = {'int': ["unit", "bool"], 'timestamp': "pruct"} correct_result = {v: k for k, vals in d.items() for v in (vals if isinstance(vals, (list, tuple)) else [vals])}
逻辑解释
isinstance(vals, (list, tuple))判断当前值是否是列表或元组(可根据需求扩展其他可迭代类型)- 如果是列表/元组,直接遍历其中的元素
- 如果是字符串,将其包装为单元素列表
[vals],确保遍历的时候取到的是整个字符串,而非单个字符
运行后得到目标输出:
{'unit': 'int', 'bool': 'int', 'pruct': 'timestamp'}
内容的提问来源于stack exchange,提问作者Topde
相关产品推荐
相关产品推荐

