Skip to main content
 首页 » 编程设计

Python:比较列表并在公共(public)字段中合并

2025年05月04日13xiaohuochai

我有以下两个列表:

ISO3166_CountryCodes_NO = [["NO","Norge"],["SE","Sverige"],["GR","Hellas"]] 
ISO3166_CountryCodes_EN = [["NO","Norway"],["SE","Sweden"],["GR","Greece"]] 

如你所见,国家代码始终相同,但国家名称不同(不同的翻译) 我怎样才能创建一个这样的列表:

ISO3166_CountryCodes = [["NO","Norge","Norway"],["SE","Sverige","Sweden"],["GR","Hellas","Greece"]] 

我可以在第一个列表中使用 for 循环,对于每个元素,我可以搜索第二个元素以找到常见的国家/地区代码。然后将翻译附加到一个新列表中,但我觉得这种方式有点笨拙。

在 Python 中有没有更好的方法来实现这一点?比如我比较熟悉的Perl,我会用哈希表。

请您参考如下方法:

在 Python 中,字典就是一个哈希表。首先,创建两个字典:

NO_dict = {x[0]: x[1] for x in ISO3166_CountryCodes_NO} 
EN_dict = {x[0]: x[1] for x in ISO3166_CountryCodes_EN} 

它给你:

{'GR': 'Hellas', 'NO': 'Norge', 'SE': 'Sverige'} 
{'GR': 'Greece', 'NO': 'Norway', 'SE': 'Sweden'} 

然后您可以像这样创建一个列表:

final_list = [[k, NO_dict[k], EN_dict[k]] for k in NO_dict] 

给你:

[['GR', 'Hellas', 'Greece'], 
 ['SE', 'Sverige', 'Sweden'], 
 ['NO', 'Norge', 'Norway']] 

以后您可能会发现将数据保存在字典中并将名称存储在元组中会更容易,例如:

final_dict = {k:(NO_dict[k], EN_dict[k]) for k in NO_dict} 

这样您就可以使用缩写作为键来获取项目,例如final_dict['NO'] 会生成 ('Norge', 'Norway')

编辑:OrderedDict

如果你有 python >= 2.7,并且你担心顺序,你仍然可以通过 OrderedDict 使用字典,例如:

from collections import OrderedDict 
 
# A list of lists can be used as input for an OrderedDict, so don't need to loop 
NO_dict = OrderedDict(ISO3166_CountryCodes_NO) 
EN_dict = OrderedDict(ISO3166_CountryCodes_EN) 
 
# Assumes you want the result in the same order as the Norwegian list 
# Iterate over the English list if it has a preferred order 
 
final_dict = OrderedDict([(k, (NO_dict[k], EN_dict[k])) for k in NO_dict]) 

(对于另一种实现,请参阅 AshwiniChaudhary 的回答)