结合字典理解和列表理解来合并字典对

问题描述

给定字典“国家”:

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'}]
,

对于您提供的数据,您可以只引用每个输入字典中的 iso3country 值来为结果中的每个字典创建键/值对:

data = [{ ctry['iso3'] : ctry['country'] } for ctry in countries]

输出:

[
 {'ABW': 'Aruba'},{'ASM': 'American Samoa'}
]

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...