如何将字典中列表类型值里的字符串数字转换为整数?
解决方案:保留列表结构,仅转换字符串数字为整数
嘿,你遇到的问题很明确——原来的代码直接把字典的值替换成了单个整数,完全丢失了原有的列表结构和第一个元素!咱们来快速修正这个问题:
问题分析
你之前写的 d[i] = int(v[1]) 是把每个键对应的整个值替换成了转换后的整数,自然就没了原列表里的'paper'这类元素和列表结构。我们要做的是保留列表,只修改列表中的第二个字符串数字。
方法一:循环修改原字典
遍历字典的每个键值对,重新构造列表:保留第一个元素,把第二个字符串转成整数再放回去:
d = {'12345': ['paper', '3'], '67890': ['pen', '78'], '11223': ['olive', '100'], '33344': ['book', '18']} for key, value in d.items(): # 保留第一个元素,将第二个字符串转换为整数后组成新列表 d[key] = [value[0], int(value[1])] print(d)
运行结果完美符合你的期望:
{'12345': ['paper', 3], '67890': ['pen', 78], '11223': ['olive', 100], '33344': ['book', 18']}
方法二:字典推导式(更简洁的Pythonic写法)
如果喜欢紧凑的代码,一行字典推导式就能搞定:
d = {k: [v[0], int(v[1])] for k, v in d.items()}
逻辑和上面的循环完全一致,只是写法更简洁。
额外小提示
如果你的字典可能存在异常数据(比如列表长度不足2、第二个元素不是可转换的数字字符串),可以加个简单判断避免报错:
for key, value in d.items(): if len(value) >= 2 and value[1].isdigit(): d[key] = [value[0], int(value[1])]
这样能防止因数据格式问题触发ValueError或IndexError。
内容的提问来源于stack exchange,提问作者st040506
相关产品推荐
相关产品推荐

