我有2个名单:时间大陆和国家之一以及另一个玩家国籍列表。我想将玩家的国籍(国家)转换为大陆。
list=({'Asia': ['Afghanistan', 'Armenia', ..., 'Yemen'],
'Africa': ['Algeria', 'Egypt', ..., 'Togo'],
'North_America': ...
}
答案 0 :(得分:1)
首先,您的女性主义是错误的:list
只是方括号中的项目集合,例如[1,2,3,4,5]
,以及从密钥到值的dict
映射,例如{'A': 1, 'B': 2}
如果我理解正确,您有一个dict
,可以将大陆映射到该大陆所包含的国家/地区列表,例如{'Asia': ['Afghanistan','Armenia','Azerbaijan', ...], ...}
和dict
将玩家映射到他们的国家。
因此,基本策略是通过dict
玩家和国家/地区,在各大洲dict
搜索他们的国家/地区,然后将该大陆保存到映射的新dict
球员到大陆。
player_countries = {}
continent_countries = {}
player_continent = {}
for player, country in player_countries.items():
for continent, country_list in continent_countries.items():
if country in country_list:
player_continent[player] = continent
这不是最有效的方式(例如,即使我们找到了正确的方法,我们也会继续遍历各大洲),但这是最简单的理解,你不必担心性能问题。用例这么小。
答案 1 :(得分:1)
一个可能的解决方案是让每个玩家在这个dict
大陆上循环,并且对于每个大陆,询问玩家的国家是否在该大陆的列表中。
注意:将列表list
命名为关键字是不好的做法,我在下面使用了continents
。
假设您的播放器/国家/地区列表如下所示:
players = [{'name': 'player_a', 'country': 'Spain'},
{'name': 'player_b', 'country': 'Japan'},
{'name': 'player_c', 'country': 'France'}]
你可以这样做:
for p in players:
for c in continents:
if p['country'] in c: # if the list of countries for this continent contains the player's country
print('%s belongs to %s' % (p['name'], c))
break # no need to look for other continents
else: # note the indentation: will be called only if for does not end with a break
print('%s does not belong to any continent :(' % p['name'])
这将有以下输出:
player_a belongs to Europe
player_b belongs to Asia
player_c belongs to Europe
答案 2 :(得分:1)
创建映射到各大洲的国家/地区的反向dict
,并使用它将您的国家/地区列表映射到相应的continetn
con2cou = {
'Asia': ['Afghanistan', ...],
'Africa': ['Algeria', ...],
'North_America': ['Caribbean',...],
'South_America': ['South America', ...],
'Europe': ['Albania',...],
'Oceania': ['American Samoa', ...]
}
# reverse dict
cou2con = {cou: con for con in con2cou for cou in con2cou[con]}
players_countries = ['Albania', 'Togo', ...]
players_continents = [cou2con[pc] for pc in players_countries]
# ['Europe', 'Africa', ...]