Python 3中如何将指定字符串转为字典?代码报错排查
解决字符串转字典的IndexError问题及正确实现方法
我来帮你搞定这个问题!先拆解下你代码里的几个坑,然后给你靠谱的实现方式~
错误原因分析
- 变量大小写踩坑:Python是严格区分大小写的!你写的
While得改成小写while,Len要换成len,还有拆分字符串时用的s其实是你定义的大写S,不然会直接报变量未定义错误。 - 循环变量更新无效:
i+2只是算了个数值,但没把结果赋值给i,循环会无限死跑;而且根本不需要跳2步,每个列表元素对应一个键值对,应该用i += 1逐步遍历。 - 字典赋值变量用错:你把拆分后的键值对存在了
A里,但赋值时却用了没定义的a;就算用对A,A[i]也是错的——A是单个键值对拆分后的列表(比如['a','65']),得用A[0]当键、A[1]当值。 - 索引越界的直接诱因:原代码里的循环逻辑(就算
i+2生效)会让i很快超过列表长度,再加上变量名错误导致引用了不存在的列表,直接触发了IndexError: list index out of range。
正确实现方法
方法一:修正后的循环写法
把所有错误点修正后,代码就能正常运行了:
S = 'a=65 b=66 c=67' L = S.split(' ') # 用定义好的大写S D = dict() i = 0 while i < len(L): # 小写的while和len A = L[i].split('=') D[A[0]] = A[1] # 用A的索引0和1对应键与值 i += 1 # 正确更新循环变量 print(D)
运行后会输出目标字典:{'a': '65', 'b': '66', 'c': '67'}。
方法二:更简洁的Pythonic写法
用字典推导式或者普通for循环,能避免手动管理循环变量,更不容易出错:
字典推导式(一行搞定)
S = 'a=65 b=66 c=67' D = {item.split('=')[0]: item.split('=')[1] for item in S.split(' ')} print(D)
可读性更好的for循环写法
S = 'a=65 b=66 c=67' D = dict() for item in S.split(' '): key, value = item.split('=') # 直接解包键和值 D[key] = value print(D)
内容的提问来源于stack exchange,提问作者GursimranSe
相关产品推荐
相关产品推荐

