在Python中列出转换

时间:2017-11-14 09:33:23

标签: python list

我有2个名单:时间大陆和国家之一以及另一个玩家国籍列表。我想将玩家的国籍(国家)转换为大陆。

list=({'Asia': ['Afghanistan', 'Armenia', ..., 'Yemen'],
       'Africa': ['Algeria', 'Egypt', ..., 'Togo'],
       'North_America': ...
       }

3 个答案:

答案 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', ...]