Python中如何用单行条件表达式实现字典键值对按需存在?
解决字典中条件性添加键值对的问题
你的思路没问题,但不能通过返回None作为键来跳过键值对——Python字典会把None当作合法键存入,这不是你要的效果。下面是两种可行的实现方式:
方法1:用字典解包合并固定与条件键值对
把固定键值对和条件性键值对分开处理,通过**解包将条件部分合并到基础字典中:
animals = ['dog', 'duck', 'goose', 'swan'] legs = [4, 2, 2, 2] beak_color = ['black','red', 'yellow'] for i in range(len(animals)): # 仅当动物不是dog时生成beak键值对,否则返回空字典 conditional_part = {'beak': beak_color[i-1]} if animals[i] != 'dog' else {} # 合并基础字典和条件字典 features = {'legs_num': legs[i], **conditional_part} print(features)
方法2:先建基础字典,再条件添加键值对
这是更直观的写法,新手更容易理解:
animals = ['dog', 'duck', 'goose', 'swan'] legs = [4, 2, 2, 2] beak_color = ['black','red', 'yellow'] for i in range(len(animals)): features = {'legs_num': legs[i]} # 满足条件时才添加beak键值对 if animals[i] != 'dog': features['beak'] = beak_color[i-1] print(features)
原代码错误说明
你原来的写法[None if animals[i] == 'dogs' else 'beak': beak_color[i - 1]]是语法错误,字典键值对不能放在列表里;就算去掉列表,写成None if ... else 'beak': beak_color[i-1],Python也会把None当作合法键存入字典,而不是忽略这个键值对——这和你期望的“不存在该键”完全不符。另外注意你的条件里写的是'dogs'(复数),但列表里的元素是'dog'(单数),这也是个小bug,需要修正。
内容的提问来源于stack exchange,提问作者FliegendeButter
相关产品推荐
相关产品推荐

