问题描述
给定字典“国家”:
countries = [
{'country': 'Aruba','iso3': 'ABW'},{'country': 'Afghanistan','iso3': 'AFG'},{'country': 'Angola','iso3': 'AGO'},{'country': 'Anguilla','iso3': 'AIA'},{'country': 'Albania','iso3': 'ALB'},{'country': 'Andorra','iso3': 'AND'},{'country': 'United arab Emirates','iso3': 'ARE'},{'country': 'Argentina','iso3': 'ARG'},{'country': 'Armenia','iso3': 'ARM'},{'country': 'American Samoa','iso3': 'ASM'}
]
我想将 iso3 值作为键,将国家/地区值作为值。期望输出:
[
{'ABW': 'Aruba'},{'AFG': 'Afghanistan'},{'AGO': 'Angola'},{'AIA': 'Anguilla'},{'ALB': 'Albania'},{'AND': 'Andorra'},{'ARE': 'United arab Emirates'},{'ARG': 'Argentina'},{'ARM': 'Armenia'},{'ASM': 'American Samoa'}
]
我已经实现了:
iso3_map = []
for country in countries:
data = {
country['iso3']: country['country']
}
iso3_map.append(data)
但我想知道如何在列表理解中以更优雅的方式做到这一点。 我尝试了一些方法,我得到的最接近的是:
[{v if k == 'iso3' else None: v if k == 'country' else None for k,v in country.items()} for country in countries]
但不返回所需的输出
解决方法
这应该会给你你想要的输出。
[{country['iso3']: country['country']} for country in countries]
,
使用
iso3_map = [{x['iso3']: x['country']} for x in countries]
输出
[{'ABW': 'Aruba'},{'AFG': 'Afghanistan'},{'AGO': 'Angola'},{'AIA': 'Anguilla'},{'ALB': 'Albania'},{'AND': 'Andorra'},{'ARE': 'United Arab Emirates'},{'ARG': 'Argentina'},{'ARM': 'Armenia'},{'ASM': 'American Samoa'}]
,
对于您提供的数据,您可以只引用每个输入字典中的 iso3
和 country
值来为结果中的每个字典创建键/值对:
data = [{ ctry['iso3'] : ctry['country'] } for ctry in countries]
输出:
[
{'ABW': 'Aruba'},{'ASM': 'American Samoa'}
]