根据列表值匹配字典键生成新字典却返回空集,求原因与解决
问题分析与解决方案
我来帮你揪出问题根源,你得到空结果主要是两个关键错误导致的:
1. 类型不匹配(最核心问题)
你看,原字典里的键7777777是整数类型,但你的列表my_list里对应的条目是字符串类型的"7777777"。在Python里,整数和字符串是完全不同的对象,所以k in my_list这个判断永远会返回False,自然找不到任何匹配的键值对。
2. 字典操作方法错误
你用了new_dict.append(k),但append()是列表的专属方法,字典根本没有这个方法。而且你也没提前把new_dict初始化为空字典,正确的做法应该是先定义new_dict = {},然后用new_dict[k] = my_dict[k]来添加符合条件的键值对。
修正后的代码
这里提供两种修正思路,你可以根据需求选择:
思路一:把字典的键转成字符串和列表匹配
my_list = ["7777777", "888888", "99999"] my_dict = {21058199: '500', 7777777: '500', 21058199: '500'} new_dict = {} for k in my_dict.keys(): if str(k) in my_list: new_dict[k] = my_dict[k] print(new_dict) # 输出: {7777777: '500'}
思路二:把列表的元素转成整数和字典键匹配
my_list = ["7777777", "888888", "99999"] my_dict = {21058199: '500', 7777777: '500', 21058199: '500'} # 先把列表转成整数列表 int_list = [int(item) for item in my_list] new_dict = {} for k in my_dict.keys(): if k in int_list: new_dict[k] = my_dict[k] print(new_dict) # 输出: {7777777: '500'}
另外提个小细节:你原字典里重复出现了21058199这个键,Python字典会自动保留最后一个键值对,所以实际my_dict里21058199只会有一个条目哦。
内容的提问来源于stack exchange,提问作者Michael Queue
相关产品推荐
相关产品推荐

