Python3:用列表/字典推导式补全字典列表的Likes键
问题解决:为字典列表补全Likes字段
原输入数据
facebook_posts = [ {'Likes': 21, 'Comments': 2}, {'Likes': 13, 'Comments': 2, 'Shares': 1}, {'Likes': 33, 'Comments': 8, 'Shares': 3}, {'Comments': 4, 'Shares': 2}, {'Comments': 1, 'Shares': 1}, {'Likes': 19, 'Comments': 3} ]
需求
为列表中没有Likes键的字典添加{'Likes': 0},优先用列表/字典推导式实现,若有需要提供替代方案。
方法一:列表+字典推导式实现
可以通过字典推导式合并默认字段与原有键值对,再用列表推导式遍历整个列表,一行代码完成:
facebook_posts_new = [{'Likes': 0, **post} if 'Likes' not in post else post for post in facebook_posts]
或者用更直观的dict.get()方法结合推导式:
facebook_posts_new = [ {'Likes': post.get('Likes', 0), **{k: v for k, v in post.items() if k != 'Likes'}} for post in facebook_posts ]
执行后得到的结果完全符合你的期望:
facebook_posts_new = [ {'Likes': 21, 'Comments': 2}, {'Likes': 13, 'Comments': 2, 'Shares': 1}, {'Likes': 33, 'Comments': 8, 'Shares': 3}, {'Likes': 0, 'Comments': 4, 'Shares': 2}, {'Likes': 0, 'Comments': 1, 'Shares': 1}, {'Likes': 19, 'Comments': 3} ]
你的尝试代码问题分析
你写的代码存在两处关键问题:
- 语法错误:列表推导式中
for {}是无效写法,循环部分需要遍历可迭代对象的具体元素; - 逻辑错误:
facebook_posts[post]['Likes']是错误的索引方式,post是字典元素,不能作为列表索引;判断Likes是否存在应该直接用'Likes' not in post。
替代方案:普通循环实现
如果觉得推导式可读性不足,也可以用普通循环完成,代码更直观:
facebook_posts_new = [] for post in facebook_posts: new_post = post.copy() # 复制原字典,避免修改原始数据 new_post.setdefault('Likes', 0) # 键不存在时添加默认值,存在则保留原值 facebook_posts_new.append(new_post)
内容的提问来源于stack exchange,提问作者Johny_Capuello
相关产品推荐
相关产品推荐

