我正在使用pytz。我已经阅读了整个文档表,但没有看到如何做到这一点。
我有一个时区:美国/芝加哥。我想要的只是获取该时区的相应国家代码:美国。
它表明我可以做相反的事情,例如:
>>> country_timezones('ch')
['Europe/Zurich']
>>> country_timezones('CH')
['Europe/Zurich']
但我需要反过来做。
这可以在 Python 中使用 pytz (或任何其他方式)来完成吗?
您可以使用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'
这很简单。您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'
.