2015-07-27 41 views
5

Ho una serie di dizionari che assomiglia a questo:python map array di dizionari per dizionario?

[ 
    { 'country': 'UK', 'city': 'Manchester' }, 
    { 'country': 'UK', 'city': 'Liverpool' }, 
    { 'country': 'France', 'city': 'Paris' } ... 
] 

e voglio finire con un dizionario come questo:

{ 'Liverpool': 'UK', 'Manchester': 'UK', ... } 

Ovviamente può fare questo:

d = {} 
for c in cities: 
    d[c['city']] = c['country'] 

Ma c'è un modo per farlo con una mappa a linea singola?

risposta

9

È possibile utilizzare un dict comprehension:

>>> li = [ 
... { 'country': 'UK', 'city': 'Manchester' }, 
... { 'country': 'UK', 'city': 'Liverpool' }, 
... { 'country': 'France', 'city': 'Paris' } 
... ] 

>>> {d['city']: d['country'] for d in li} 
{'Paris': 'France', 'Liverpool': 'UK', 'Manchester': 'UK'} 

Oppure operator.itemgetter e map funzione:

>>> dict(map(operator.itemgetter('city','country'),li)) 
{'Paris': 'France', 'Liverpool': 'UK', 'Manchester': 'UK'}