如何快速创建多键对应同一值的Python字典?
非闰年月份天数字典的简洁创建方法
你想要创建的非闰年月份天数字典,确实可以通过避免重复输入相同值来实现——你之前尝试的写法不合法,是因为Python会把{1,3,5,...}这种逗号分隔元素的结构识别为集合,集合不支持键值对的冒号语法,所以报错。
以下是几种简洁的实现方式:
方法一:合并dict.fromkeys生成的字典
这是你提到的思路,用dict.fromkeys批量生成相同值的键值对,再通过字典解包(**)合并:
nonleap_year = { **dict.fromkeys([1, 3, 5, 7, 8, 10, 12], 31), **dict.fromkeys([4, 6, 9, 11], 30), 2: 28 }
方法二:字典推导式(更易维护)
把月份按天数分组,用推导式遍历生成键值对,结构清晰,后续修改分组也方便:
# 先定义月份分组和对应天数 month_day_groups = [ ([1, 3, 5, 7, 8, 10, 12], 31), ([4, 6, 9, 11], 30), ([2], 28) ] # 推导式生成字典 nonleap_year = {month: days for group, days in month_day_groups for month in group}
方法三:紧凑版推导式(一行实现)
如果追求代码紧凑,可以把分组直接写在推导式里:
nonleap_year = {m: d for groups in [([1,3,5,7,8,10,12],31), ([4,6,9,11],30), ([2],28)] for m in groups[0] for d in [groups[1]]}
其中方法一和方法二是最常用的,兼顾简洁性和可读性。
内容的提问来源于stack exchange,提问作者Lei xy
相关产品推荐
相关产品推荐

