字典和默认值

假设connectionDetails是Python字典,那么像这样的重构代码的最佳,最优雅,最“ pythonic”的方法是什么?


if "host" in connectionDetails:

    host = connectionDetails["host"]

else:

    host = someDefaultValue


慕妹3146593
浏览 470回答 3
3回答

慕神8447489

像这样:host = connectionDetails.get('host', someDefaultValue)

慕运维8079593

您也可以这样使用defaultdict:from collections import defaultdicta = defaultdict(lambda: "default", key="some_value")a["blabla"] => "default"a["key"] => "some_value"您可以传递任何普通函数而不是lambda:from collections import defaultdictdef a():  return 4b = defaultdict(a, key="some_value")b['absent'] => 4b['key'] => "some_value"

慕标琳琳

虽然这.get()是一个很好的习惯用法,但是它比if/else(比try/except大多数情况下可以预期字典中键的存在要慢):>>> timeit.timeit(setup="d={1:2, 3:4, 5:6, 7:8, 9:0}", ... stmt="try:\n a=d[1]\nexcept KeyError:\n a=10")0.07691968797894333>>> timeit.timeit(setup="d={1:2, 3:4, 5:6, 7:8, 9:0}", ... stmt="try:\n a=d[2]\nexcept KeyError:\n a=10")0.4583777282275605>>> timeit.timeit(setup="d={1:2, 3:4, 5:6, 7:8, 9:0}", ... stmt="a=d.get(1, 10)")0.17784020746671558>>> timeit.timeit(setup="d={1:2, 3:4, 5:6, 7:8, 9:0}", ... stmt="a=d.get(2, 10)")0.17952161730158878>>> timeit.timeit(setup="d={1:2, 3:4, 5:6, 7:8, 9:0}", ... stmt="if 1 in d:\n a=d[1]\nelse:\n a=10")0.10071221458065338>>> timeit.timeit(setup="d={1:2, 3:4, 5:6, 7:8, 9:0}", ... stmt="if 2 in d:\n a=d[2]\nelse:\n a=10")0.06966537335119938
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python