Python如何替代rsplit避免IndexError,无分隔符时返回空字符串?
解决方案
你不需要更换其他函数,直接基于现有逻辑加简单判断即可,也可以用更适配该场景的rpartition()方法实现需求:
方法1:加分隔符存在性判断(修改最小复现代码)
拆分前先判断key中是否包含分隔符~,不存在则直接返回空字符串,不会触发索引越界:
thisdict = { "brand~tag": "Ford", "model~tag": "Mustang", "year": 1964 } DLM = '~' for k in thisdict.keys(): suffix = k.rsplit(DLM, 1)[1] if DLM in k else '' print(suffix)
运行输出:
tag tag (空行,对应无分隔符的key返回空字符串)
方法2:使用rpartition()方法(更高效,无需两次查询分隔符)
str.rpartition(sep)会从右往左查找最后一次出现的分隔符,返回固定长度为3的元组(前缀, 分隔符, 后缀):
- 找到分隔符时,三个位置都有对应值
- 找不到分隔符时,前两个位置为空字符串,第三个位置为原字符串
只需判断返回的元组中分隔符是否为空,即可决定取后缀还是返回空:
for k in thisdict.keys(): _, sep, suffix = k.rpartition(DLM) suffix = suffix if sep else '' print(suffix)
修改原业务代码
如果偏好字典推导式,直接加判断条件即可:
import random DLM = '~' programmatic_dict = { key: '{} {} {}'.format(val, DLM, key.rsplit(DLM, 1)[1]) if (random.randint(0,9) == 9 and DLM in key) else val for key, val in programmatic_dict.items() }
如果希望可读性更高,建议用普通循环实现:
import random DLM = '~' processed_dict = {} for key, val in programmatic_dict.items(): if random.randint(0,9) == 9 and DLM in key: suffix = key.rsplit(DLM, 1)[1] processed_dict[key] = f"{val} {DLM} {suffix}" else: processed_dict[key] = val programmatic_dict = processed_dict
内容的提问来源于stack exchange,提问作者StressedBoi69420
相关产品推荐
相关产品推荐

