Понять словарь, который отображает названия месяцев в их числовые значения - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь создать словарь, который отображает названия месяцев в их конкретное числовое значение (январь> 1, февраль> 2 и т. Д. c), используя

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.

Что не так?

Ответы [ 5 ]

1 голос
/ 23 января 2020

Вы перебираете один элемент, то есть всю строку, разделенную запятой. Вам нужно разделить строку запятыми:

>>> 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.

0 голосов
/ 23 января 2020

Разделить на , и использовать 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}
0 голосов
/ 23 января 2020

Ваш массив содержит только одну строку, либо используйте метод split, либо передайте элемент как отдельную строку в методе перечисления

0 голосов
/ 23 января 2020

Попробуйте код ниже,

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}
0 голосов
/ 23 января 2020

В вашем коде 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'])}
...