排序多语言国家名称

1 投票
1 回答
760 浏览
提问于 2025-04-17 21:28

我有一个不同语言的国家名称列表,想要按照国家名称进行排序。目前,我的排序是基于索引值的。

以下是我简化后的国家名称列表:

ADDRESS_COUNTRY_STYLE_TYPES = {}

for language_code in LANGUAGES.iterkeys():
    ADDRESS_COUNTRY_STYLE_TYPES[language_code] = OrderedDict()
    if 'af' in LANGUAGES.iterkeys(): 
        ADDRESS_COUNTRY_STYLE_TYPES['af'][0] = " Kies 'n land of gebied" # Select a country or territory
        ADDRESS_COUNTRY_STYLE_TYPES['af'][1] = "Afganistan" #Afghanistan
        ADDRESS_COUNTRY_STYLE_TYPES['af'][2] = "Åland" #Aland
        ADDRESS_COUNTRY_STYLE_TYPES['af'][3] = "Albanië" #Albania
        ....
        ADDRESS_COUNTRY_STYLE_TYPES['af'][14] = "Australië" #Australia
        ADDRESS_COUNTRY_STYLE_TYPES['af'][15] = "Oostenryk" #Austria
        ADDRESS_COUNTRY_STYLE_TYPES['af'][16] = "Aserbeidjan" #Azerbaijan
        ADDRESS_COUNTRY_STYLE_TYPES['af'][17] = "Bahamas" #Bahamas
        ADDRESS_COUNTRY_STYLE_TYPES['af'][18] = "Bahrein" #Bahrain
        ADDRESS_COUNTRY_STYLE_TYPES['af'][19] = "Bangladesj" #Bangladesh
        ADDRESS_COUNTRY_STYLE_TYPES['af'][20] = "Barbados" #Barbados
        ADDRESS_COUNTRY_STYLE_TYPES['af'][21] = "Wit-Rusland" #Belarus
        ADDRESS_COUNTRY_STYLE_TYPES['af'][22] = "België" #Belgium
        ....

这是我在views.py文件中调用国家名称的代码:

def get_address_country_style_types(available_languages, with_country_style_zero=True):
    address_country_style_types = {}
    preview_labels = {}
    for code, name in available_languages:
        address_country_style_types[code] = ADDRESS_COUNTRY_STYLE_TYPES[code].copy()
        if not with_country_style_zero:
            address_country_style_types[code].pop(0)
        preview_labels[code] = ADDRESS_DETAILS_LIVE_PREVIEW_LABELS[code]
        # in case preview labels are not defined for the language code
        # fall back to 'en', which should always be there
        if len(preview_labels[code]) == 0:
            preview_labels[code] = ADDRESS_DETAILS_LIVE_PREVIEW_LABELS['en']

    address_country_style_types = sorted(address_country_style_types, key=lambda x:x[1])

    return address_country_style_types, preview_labels

上面的代码在HTML下拉列表中只返回了索引号。问题出在以下这行代码上(更准确地说,是我不知道怎么让它正常工作):

address_country_style_types = sorted(address_country_style_types, key=lambda x:x[1])

我该如何返回排序后的国家列表? 我在这里使用lambda的方式正确吗?我应该在这里使用lambda吗?

我已经花了好几天在这个问题上,我的编程技能不是很强,读了很多相关的帖子也没有找到解决办法,所以任何帮助都非常感谢。

我看过这篇关于如何在HTML选择下拉列表中排序多语言国家名称的博客,这基本上就是我想做的事情。

编辑

注释掉上面代码中的以下那行代码确实返回了国家名称列表,但这些国家名称是按照索引值排序的,而不是按照国家名称排序。

address_country_style_types = sorted(address_country_style_types, key=lambda x:x[1])

1 个回答

2

我在程序里排序多语言的国家名称时失败了。

于是,我把列表复制到Excel里,点击了排序按钮(根据翻译后的国家名称排序 - 索引值保持不变),然后把数据复制回文件。这样做效果很好,就是工作量有点大。

希望这能对某些人有所帮助。

撰写回答