如何从Python字典列表中提取仅含name键的字典子集?
修正代码实现与错误分析
原代码的问题
- 遍历字典键值对时,直接写
for k, v in dicts[i]不对,得用dicts[i].items()才能同时拿到键和值 - 判断逻辑搞反了:要判断键k是不是'name',而不是
dicts[i][k] == 'name'(这是拿值去和'name'对比,完全错误) - if语句末尾没加冒号
:,属于语法错误,直接导致代码运行失败 res.append(dicts[i][k] = v)是错误写法,不能在append方法里做赋值操作,得先构造新字典再添加- 函数没有返回值,最后print出来的是None;而且使用全局变量
res也不够规范
正确实现方式
方式一:基础循环(和原代码思路对齐)
def new_dict(dicts): res = [] for item in dicts: # 直接取每个字典的'name'键,构造新字典加入结果列表 res.append({'name': item['name']}) return res dicts = [ {'name': 'Sam', 'age': 12}, {'name': 'Pete', 'age': 14}, {'name': 'Sarah', 'age': 16} ] res = new_dict(dicts) print(res)
方式二:列表推导式(更简洁的Python风格写法)
dicts = [ {'name': 'Sam', 'age': 12}, {'name': 'Pete', 'age': 14}, {'name': 'Sarah', 'age': 16} ] res = [{'name': item['name']} for item in dicts] print(res)
两种方式运行后都会得到期望结果:
[{'name': 'Sam'}, {'name': 'Pete'}, {'name': 'Sarah'}]
内容的提问来源于stack exchange,提问作者Tobias Legenden
相关产品推荐
相关产品推荐

