理解将月份名称映射到其数值的字典

Comprehend a dictionary that maps the names of months to their numerical values

我正在尝试创建一个字典,将月份名称映射到它们的特定数值(Jan->1、Feb->2 等),使用

month_dict = {k:v+1 for v,k in enumerate(['Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'])}

而不是返回正确的数值5,然而,

print(month_dict['May'])

抛出 KeyError。

怎么了?

在您的代码 enumerate(['Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec']) 中,列表只有一个字符串。

在月份名称周围使用 ' 或使用 split

month_dict = {k:v+1 for v,k in enumerate(['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'])}

您正在迭代一个元素,即整个逗号分隔的字符串。您需要用逗号分隔字符串:

>>> month_dict = {k:v+1 for v,k in 
enumerate('Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','))}
>>> print(month_dict['May'])
5

您的方法给出了以下字典:

{'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec': 1}

所以你可以看到,它的键是'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec',没有单独的键,名为May

试试下面的代码,

import numpy as np
month_dict = {k:v+1 for v,k in enumerate('Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','))}
month_dict

输出

{'Jan': 1, 'Feb': 2, 'Mar': 3, 'Apr': 4, 'May': 5, 'Jun': 6, 'Jul': 7, 'Aug': 8, 'Sep': 9, 'Oct': 10, 'Nov': 11, 'Dec': 12}

你的数组只包含一个字符串,要么使用 split 方法,要么在 enumerate 方法中将元素作为单独的字符串传递

拆分为 , 并使用 enumerate 索引开始 1

例如:

print({v:i for i,v in enumerate('Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(","), 1)})

输出:

{'Jan': 1, 'Feb': 2, 'Mar': 3, 'Apr': 4, 'May': 5, 'Jun': 6, 'Jul': 7, 'Aug': 8, 'Sep': 9, 'Oct': 10, 'Nov': 11, 'Dec': 12}