15

私はpytzを使用しています。ドキュメントシート全体を読みましたが、これがどのように行われるのかわかりませんでした。

私はタイムゾーンを持っています:アメリカ/シカゴ。私が欲しいのは、このタイムゾーンのそれぞれの国コードを取得することです:米国。

これは、次のように反対のことができることを示しています。

>>> country_timezones('ch')
['Europe/Zurich']
>>> country_timezones('CH')
['Europe/Zurich']

しかし、私はそれを逆にする必要があります。

これは、pytz(またはその他の方法)を使用してPythonで実行できますか?

4

2 に答える 2

18

country_timezonesからオブジェクトを使用してpytz、逆マッピングを生成できます。

from pytz import country_timezones

timezone_country = {}
for countrycode in country_timezones:
    timezones = country_timezones[countrycode]
    for timezone in timezones:
        timezone_country[timezone] = countrycode

次に、結果の辞書を使用します。

>>> timezone_country['Europe/Zurich']
u'CH'
于 2012-10-22T22:21:42.570 に答える
5

これは簡単。dict各国をタイムゾーンのリストにマッピングします。list各メンバーをにマップし直したいとしますdict

答えを出すだけでなく、その答えを見てみましょう。

まず、dict各国を単一のタイムゾーンにマッピングした場合、これは単純な逆マッピングになります。

timezone_countries = {timezone: country 
                      for country, timezone in country_timezones.iteritems()}

しかし、これは機能しません。タイムゾーンのリストへのマッピングがあり、そのリスト内の各タイムゾーンを国にマッピングし直したいとします。その英語の説明「そのリストの各タイムゾーン」は、Pythonに簡単に翻訳できます。

timezone_countries = {timezone: country 
                      for country, timezones in country_timezones.iteritems()
                      for timezone in timezones}

ここでそれが実行されています:

>>> from pytz import country_timezones
>>> timezone_countries = {timezone: country 
                          for country, timezones in country_timezones.iteritems()
                          for timezone in timezones}
>>> timezone_countries['Europe/Zurich']
u'CH'

補足:Python 2と3については言及していなかったので、2と仮定しました。3を使用している場合は、に変更iteritemsするitemsと、出力は'CH'の代わりになりu'CH'ます。

于 2012-10-22T22:33:49.557 に答える