You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python字典更新的更优实现方式(单行/简洁Pythonic写法)

更Pythonic的实现方式

这里有几种简洁的实现方式,都能得到你想要的输出:

方法1:嵌套字典推导式(单行实现)

这是最直观且符合Python风格的写法:

g_keypoints = {"test1": (14,145), "test2": (15, 151)}
d = {f"{k}_{axis}": coord for k, coords in g_keypoints.items() for axis, coord in zip('xy', coords)}

原理:通过两层循环,外层遍历原字典的键值对,内层把每个坐标和对应的x/y后缀配对,生成新的键值对。zip('xy', coords)会自动把元组的第一个元素和x绑定,第二个和y绑定。

方法2:简化的字典推导式(更直白)

如果觉得内层循环的zip不够直观,也可以拆成明确的x/y映射:

g_keypoints = {"test1": (14,145), "test2": (15, 151)}
d = {key: val for k, (x, y) in g_keypoints.items() for key, val in [(f"{k}_x", x), (f"{k}_y", y)]}

这种写法把每个原键对应的两个新键值对明确列出来,可读性更强。

方法3:利用itertools.chain生成键值对

如果偏好生成器风格的写法,可以结合itertools.chain来扁平化键值对序列:

from itertools import chain
g_keypoints = {"test1": (14,145), "test2": (15, 151)}
d = dict(chain.from_iterable([((f"{k}_x", v[0]), (f"{k}_y", v[1])) for k, v in g_keypoints.items()]))

原理:先为每个原键生成两个键值对的元组,再用chain.from_iterable把这些元组序列扁平化,最后转成字典。

以上几种方法都能替代原来的循环+update写法,代码更简洁,也符合Python的惯用风格。

内容的提问来源于stack exchange,提问作者just want to learn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 22:30:58