问题
I'm using pytz. I've read through the entire documentation sheet, but didn't see how this could be done.
I have a timezone: America/Chicago. All I want is to get the respective country code for this timezone: US.
It shows that I can do the opposite, such as:
>>> country_timezones('ch')
['Europe/Zurich']
>>> country_timezones('CH')
['Europe/Zurich']
but I need to do it the other way around.
Can this be done in Python, using pytz (or any other way for that matter)?
回答1:
You can use the country_timezones
object from pytz
and generate an inverse mapping:
from pytz import country_timezones
timezone_country = {}
for countrycode in country_timezones:
timezones = country_timezones[countrycode]
for timezone in timezones:
timezone_country[timezone] = countrycode
Now just use the resulting dictionary:
>>> timezone_country['Europe/Zurich']
u'CH'
回答2:
This is easy. You have a dict
mapping each country to a list of timezones. You want to map each list
member back to the dict
.
Rather than just give the answer, let's see how to get it.
First, if you just had a dict
mapping each country to a single timezone, this would be a simple reverse mapping:
timezone_countries = {timezone: country
for country, timezone in country_timezones.iteritems()}
But this won't work; you have a mapping to a list of timezones, and you want each timezone in that list to map back to the country. That English description "each timezone in that list" is trivially translatable to Python:
timezone_countries = {timezone: country
for country, timezones in country_timezones.iteritems()
for timezone in timezones}
Here it is in action:
>>> 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'
Side note: You didn't mention Python 2 vs. 3, so I assumed 2. If you're on 3, change iteritems
to items
, and the output will be 'CH'
instead of u'CH'
.
来源:https://stackoverflow.com/questions/13020690/get-country-code-for-timezone-using-pytz