4

如何重写以下子句:

if u'января' in date_category['title']:
    month = 1
elif u'февраля' in date_category['title']:
    month = 2
elif u'марта' in date_category['title']:
    month = 3
elif u'апреля' in date_category['title']:
    month = 4
elif u'мая' in date_category['title']:
    month = 5
elif u'июня' in date_category['title']:
    month = 6
elif u'июля' in date_category['title']:
    month = 7
elif u'августа' in date_category['title']:
    month = 8
elif u'сентября' in date_category['title']:
    month = 9
elif u'октября' in date_category['title']:
    month = 10
elif u'ноября' in date_category['title']:
    month = 11
elif u'декабря' in date_category['title']:
    month = 12

它只是看起来很丑。

4

7 回答 7

7

datetime要解决此问题,请使用 python模块解析您的日期信息。它支持语言环境,并将解决这个问题。如果属格形式确实是问题,那么只需将这些形式映射到与格,然后映射回输出。

要回答您的实际问题-

考虑您正在将数据与整数配对。如果您可以将数据转换为 format (month, integer),则可以用数据驱动您的代码。

for (n, month) in enumerate(u'января, feb, mar, apri, may, jun, jul, aug, sep, oct, nov, декабря'.split(', '), 1):# the parameter 1 specifies to start counting from 1. h/t @san4ez
    if month in date_category['title']: return n
于 2012-04-08T11:03:13.007 回答
4

获取俄罗斯国际化的系统支持:在 Python 中使用的操作系统语言环境支持

使用locale模块设置语言环境:如何在 Python 中获取 unicode 月份名称?

用途strptime在 python 中处理国际日期

演示:语言环境问题


或者,只需执行以下操作:

months = ['Jan', 'Feb', 'Mar', ...]
monthToNumber = dict((name,i+1) for i,name in enumerate(months))

monthToNumber[date_category['title']]
于 2012-04-08T11:06:07.833 回答
2
months = (u'января', u'февраля', u'марта', u'апреля', u'мая', u'июня', u'июля', u'августа', u'сентября', u'октября', u'ноября', u'декабря')
month = next(i for i,name in enumerate(months,1) if name in date_category['title'])
于 2012-04-08T11:05:16.617 回答
1

您还可以使用 list 中的 index 函数来获取月份到月份数的映射

months = (u'января', u'февраля', u'марта', u'апреля', u'мая', u'июня', u'июля', u'августа', u'сентября', u'октября', u'ноября', u'декабря')
month = months.index(date_category['title'])+1
于 2012-04-08T11:19:50.237 回答
1

创建月份的字典,并带有相应的索引:

months = [u'января', u'февраля', u'марта', u'апреля', u'мая', u'июня', u'июля', u'августа', u'сентября', u'октября', u'ноября', u'декабря']

然后你可以简单地做:

month = max(enumerate((date_category['title'].find(month) for month in months), start = 1), key = lambda x: x[1])[0]
于 2012-04-08T12:31:52.237 回答
0

只需创建一个哈希数组,将您的字符串映射到相应的月份编号,然后您可以简单地遍历它,检查键在哪里in date_category['title'],并且在所有情况下,将月份设置为相应的值。祝你好运。

于 2012-04-08T11:02:08.793 回答
0

这里有一些更反常的东西,因为我喜欢证明说“应该只有一种方法”是徒劳的:

pattern = re.compile(u'(января)|(февраля)|(марта)|(апреля)|(мая)|(июня)|(июля)|(августа)|(сентября)|(октября)|(ноября)|(декабря)')

month = map(bool, x.search(date_category['title']).groups()).index(True) + 1
于 2012-04-08T12:17:20.723 回答