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-comprehension(dict(...)
不是其中之一,您只是在生成器表达式上使用 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 字典推导中的条件表达式的主要内容,如果未能解决你的问题,请参考以下文章