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
相关产品推荐
相关产品推荐

