在Python中,如何快速创建一个字典,其中有多个键指向同一个值?[已关闭]

lhcgjxsq  于 2023-08-08  发布在  Python
关注(0)|答案(4)|浏览(88)

已关闭。此问题需要details or clarity。它目前不接受回答。
**希望改进此问题?**通过editing this post添加详细信息并阐明问题。

16小时前关闭
Improve this question
我想这么做

Nonleap_year = {
    1: 31,
    2: 28,
    3: 31,
    4: 30,
    5: 31,
    6: 30,
    7: 31,
    8: 31,
    9: 30,
    10: 31,
    11: 30,
    12: 31,
    }

字符串
但我不满意,我试着这样做,它没有工作。

Nonleap_year = {1,3,5,7,8,10,12:31,4,6,9,11:30,2:28}


如果我能这样做,它将是简单而有效的,具有简洁的代码。

Nonleap_year = {1,3,5,7,8,10,12:31,4,6,9,11:30,2:28}
Leap_year = {1,3,5,7,8,10,12:31,4,6,9,11:30,2:29}


Python认为这是一个集合,冒号不应该出现在这里。请告诉我达到这个目标的最简单的方法。
我现在知道的最好的方法是使用dict.fromkeys创建两个字典,然后合并它们。

我不知道为什么人们不喜欢我的这个问题,我是一个Python新手,如果人们对我不满意,我希望有人告诉我。我不是一个母语为英语的人,我的回答和浏览通过这与翻译,所以我希望我得到你的理解!

xcitsw88

xcitsw881#

使用monthrange函数

您可以使用calendar模块中的monthrange等函数,而不是手动写入每个值。您可以将year和month作为参数传递,并获取一个月的天数。monthrange返回一年中指定月份的一个月的第一天的工作日和一个月的天数。

from calendar import monthrange as days
{k:days(2023,k)[-1] for k in range(1,13)}

字符串
输出量:

{1: 31, 2: 28, 3: 31, 4: 30, 5: 31, 6: 30, 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31}

hvvq6cgz

hvvq6cgz2#

你提出的使用dict.fromkeys的方法听起来很合理。您可以使用字典解包语法将它们合并到单个表达式中:

{**dict.fromkeys([1, 3, 5, 7, 8, 10, 12], 31), **dict.fromkeys([4, 6, 9, 11], 30), 2: 28}

字符串

dddzy1tm

dddzy1tm3#

创建一个反向Mapfirst - key,表示最终dict中的值,并列出所有应该具有此值的键:

d = {
    31: [1,3,5,7,8,10,12],
    30: [4,6,9,11],
    28: [2]
}

字符串
而不是做一个dict解析来反转这个Map:

d_rev = {v:k for k,li in d.items() for v in li}

print(d_rev)


输出量:

{1: 31, 3: 31, 5: 31, 7: 31, 8: 31, 10: 31, 12: 31, 4: 30, 6: 30, 9: 30, 11: 30, 2: 28}

s3fp2yjn

s3fp2yjn4#

可以使用fromkeys()

dict.fromkeys((1, 3, 5, 7, 8, 10, 12), 31) | \
dict.fromkeys((4,6,9,11), 30) | \
dict.fromkeys((2,), 28)
# Out:
# {1: 31,
#  3: 31,
#  5: 31,
#  7: 31,
#  8: 31,
#  10: 31,
#  12: 31,
#  4: 30,
#  6: 30,
#  9: 30,
#  11: 30,
#  2: 28}

字符串
表达式d | other负责合并两个字典,而当dother共享键时,other的值优先。

相关问题