如何将含嵌套字典的Python字典字符串键转为整数键?
解决字典键从字符串转整数的问题
你原来的代码无效,是因为循环中拿到的i是原字典键值对的副本——修改这个副本不会对原字典产生任何影响,循环结束后自然看不到变化。
下面是几种可行的解决方法:
方法1:字典推导式(推荐,简洁高效)
直接生成一个新字典,遍历原字典的键值对时把字符串键转为整数:
dictionary = { "0": {"name": "gary", "last_name": "john", "age": 13}, "1": {"name": "larry", "last_name": "boyle", "age": 10}, "2": {"name": "banji", "last_name": "buas", "age": 20} } new_dict = {int(key): value for key, value in dictionary.items()}
执行后new_dict的键就是int类型,和原始数据结构一致,直接用这个新字典就能通过单元测试。
方法2:原地修改原字典(不推荐,但适合必须保留原字典对象的场景)
如果一定要修改原字典而不是生成新字典,需要先把所有待转换的键存成列表(避免循环时字典结构变化引发迭代错误),再逐个替换:
# 先把原字典的键转成列表,防止循环中字典大小变化报错 keys_to_convert = list(dictionary.keys()) for key in keys_to_convert: # 只处理数字字符串类型的键 if isinstance(key, str) and key.isdigit(): value = dictionary.pop(key) # 取出原键对应的值并删除原键 dictionary[int(key)] = value # 用整数键存回值
额外建议:在CSV读取阶段直接处理
如果这个字典是从CSV读取来的,更高效的方式是读取时就把键转为整数,不用事后再处理整个字典。比如用csv模块读取时:
import csv result_dict = {} with open('your_project.csv', 'r', newline='') as csvfile: reader = csv.DictReader(csvfile) for row_num, row in enumerate(reader): # 假设你用行号作为键,或者根据CSV里的主键列转换 key = int(row_num) # 或者 int(row['id']),根据你的CSV结构调整 # 把行数据存入新字典,键为整数类型 result_dict[key] = { "name": row["name"], "last_name": row["last_name"], "age": int(row["age"]) # 注意年龄也可能是字符串,按需转成int }
这样读取完成后直接得到符合要求的字典,省去后续转换步骤。
内容的提问来源于stack exchange,提问作者UrosDjosic
相关产品推荐
相关产品推荐

