Python 字典推导中的条件表达式

Posted

技术标签:

【中文标题】Python 字典推导中的条件表达式【英文标题】:Conditional expressions in Python Dictionary comprehensions 【发布时间】:2013-08-17 07:07:06 【问题描述】:
a = "hello" : "world", "cat":"bat"

# Trying to achieve this
# Form a new dictionary only with keys with "hello" and their values
b = "hello" : "world"

# This didn't work

b = dict( (key, value) if key == "hello" for (key, value) in a.items())

关于如何在字典理解中包含条件表达式以确定键、值元组是否应包含在新字典中的任何建议

【问题讨论】:

条件总是采用key == "..." 的形式,还是您正在寻找更通用的解决方案? if key == "hello" 不是 conditional expression 和 dict(...) 不是字典理解。 // 不是有效的 python 注释 【参考方案1】:

if移到最后:

b = dict( (key, value) for (key, value) in a.items() if key == "hello" )

您甚至可以使用 dict-comprehensiondict(...) 不是其中之一,您只是在生成器表达式上使用 dict 工厂):

b =  key: value for key, value in a.items() if key == "hello" 

【讨论】:

工作!!谢谢。但是为什么字典推导的语法与列表推导的语法不同 @user462455: dict((key, value) for ... in ... if ...) 不是字典理解;它是传递给dict 的生成器理解,具有相同的效果。较新版本的 Python 具有真正的字典理解,语法为 key: value for ... in ... if ...【参考方案2】:

你不需要使用字典理解:

>>> a = "hello" : "world", "cat":"bat"
>>> b = "hello": a["hello"]
>>> b
'hello': 'world'

dict(...) 不是字典理解。

【讨论】:

如果源字典中没有 HELLO 键,这不会中断吗?条件加?没有? @SyedMauzeRehan,如果没有hello 键,它将中断。你可以使用这个:b = "hello": a.get('hello')(如果没有hello 键,它将返回'hello': None)。或者如果你想得到,请使用b = "hello": a["hello"] if 'hello' in a else ,以防缺少hello @SyedMauzeRehan,我的意思是“你不需要迭代字典来获得单个键值对。”

以上是关于Python 字典推导中的条件表达式的主要内容,如果未能解决你的问题,请参考以下文章

三元表达式,列表推导是,字典生成式

python列表推导式和字典推导式

python列表推导式和字典推导式

python列表推导式和字典推导式

python列表推导式和字典推导式

Python入门-4控制语句:10推导式创建序列-列表推导式-字典推导式-集合推导式-生成器推导式