Python:对象到元组提取列表



我有一个以下格式的对象:

{
'af': {
'bidi': False, 
'code': 'af', 
'name': 'Afrikaans', 
'name_local': 'Afrikaans'
},
'ar': {
'bidi': True, 
'code': 'ar', 
'name': 'Arabic', 
'name_local': 'العربيّة'
},
...
}

这是django.conf.locale.LANG_INFO中的区域设置列表。(完整参考请参见此处:https://github.com/django/django/blob/master/django/conf/locale/init.py(。

现在,我希望在一个模型类中使用这个列表:

locale = models.CharField(max_length=5, choices=get_locale_choices(), default='en')

这样我就有了以下实用功能:

from django.conf.locale import LANG_INFO
def get_locale_choices():
return ?

现在,返回的?,我希望采用以下格式:

[
('af', 'Afrikaans'),
('ar', 'Arabic'),
...
]

我的问题是,如何将LANG_INFO字典转换为上述元组列表?

感觉像这样的事情已经接近了:

a_dict = {'color': 'blue', 'fruit': 'apple', 'pet': 'dog'}
d_items = a_dict.items()
d_items  # Here d_items is a view of items
dict_items([('color', 'blue'), ('fruit', 'apple'), ('pet', 'dog')])

但是。。。嗯,不确定?我想从关键项中提取一个子值。。。

使用列表理解:

from django.conf.locale import LANG_INFO
def get_locale_choices():
return [(k, v['name']) for k, v in LANG_INFO.items() if 'name' in v]

... if 'name' in v部分是必要的,以确保忽略具有'fallback'但没有'name'的情况(例如zh-cnzh-myzh-sg等(。

结果:

[('af', 'Afrikaans'), ('ar', 'Arabic'), ...]

注意:django.conf.locale.LANG_INFO似乎是Django内部的,所以你对它的使用并没有得到Django的正式批准。

最新更新