Python中使用filter函数筛选字典未获预期键值对结果的问题
问题分析与解决
你的代码存在两个核心问题:
- 出现
<filter at 0x230f41616a0>是因为未打印转换后的列表变量——你已经用list()将filter对象转为列表,但如果没执行print(list1),或是误直接打印filter对象,就会显示这个内存地址。 - 即便打印
list1,也只能得到[['Cornor',19], ['Trump',20]],因为你调用了students_data.values(),只提取了字典的值,丢失了键信息,无法得到带键的目标格式。
修正代码
要保留键并筛选符合条件的项,需处理字典的items()(返回键值对元组),再通过filter筛选后转成字典或格式化输出:
students_data = {1:['Sam', 15] , 2:['Rob',18], 3:['Kyle', 16], 4:['Cornor',19], 5:['Trump',20]} # 筛选年龄>18的键值对,转成字典 filtered_dict = dict(filter(lambda item: item[1][1] > 18, students_data.items())) # 输出字典格式 print(filtered_dict) # 结果:{4: ['Cornor', 19], 5: ['Trump', 20]} # 转成你期望的字符串格式 result_str = ", ".join([f"{k}:{v}" for k, v in filtered_dict.items()]) print(result_str) # 结果:4:['Cornor', 19], 5:['Trump', 20]
关键说明
students_data.items()返回每个元素为(键, 值列表)的元组,item[1][1]对应学生的年龄。dict()可将filter返回的符合条件的键值对元组直接转为字典。- 用
join结合列表推导式,能快速将字典格式转换为你需要的字符串输出。
内容的提问来源于stack exchange,提问作者Neo
相关产品推荐
相关产品推荐

