【问题标题】:Combine dict comprehension with list comprehension to merge dict pairs将 dict 理解与列表理解相结合以合并 dict 对
【发布时间】:2021-07-11 12:17:15
【问题描述】:

给定字典“国家”:

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} 应该足够了;我认为不需要外部列表。

标签: python list dictionary list-comprehension dictionary-comprehension


【解决方案1】:

这应该会给你想要的输出。

[{country['iso3']: country['country']} for country in countries]

【讨论】:

  • 不要穿过窗户,而是选择门……简单!谢谢!
【解决方案2】:

使用

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

【讨论】:

    【解决方案3】:

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

    data = [{ ctry['iso3'] : ctry['country'] } for ctry 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'}
    ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-16
      • 2021-06-22
      • 2023-03-23
      • 1970-01-01
      • 2012-09-03
      • 2018-07-05
      相关资源
      最近更新 更多