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

これを解決するには、pythondatetimeモジュールを使用して日付情報を解析します。ロケールをサポートしており、これを整理します。属格形が本当に問題である場合は、それらの形を与格にマップしてから、出力に戻します。

あなたの実際の質問に答えるには -

データと整数を組み合わせていると考えてください。データを形式に変換できる場合は、データを使用し(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で使用するためのOSロケールのサポート

localeモジュールを使用してロケールを設定します。PythonでUnicodeの月の名前を取得するにはどうすればよいですか?

使用strptimePythonでの国際日付の処理

デモンストレーション:ロケールの問題


または、次のようにします。

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

リストでインデックス関数を使用して、月数から月数へのマッピングを取得することもできます

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

対応するインデックスを使用して、月の dict を作成します。

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

「それを行う方法は1つしかないはずだ」と言うのが無益であることを証明することを楽しんでいるので、これはもう少しひねくれたものです。

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

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