2017-10-16 16 views
-1

j'ai un dictionnaire contenant plusieurs tuple comme clés:Python 3.x - dictionnaire de mappage avec plusieurs tuples que les clés

dictionary = {('Paris', 'Monaco', 'Marseille'): 'France', 
       ('Milan', 'Juventus', 'Roma'): 'Italy', 
       ('Manchester', 'Liverpool', 'London'): 'England'} 

Comment cartographier la liste avec beaucoup de noms de ville dans le dictionnaire ci-dessus:

lst = ['Paris','Paris','Monaco','Milan','London',...] 

Je l'ai essayé ceci:

countries = [] 
for k,v in dictionary.items(): 
    for each in lst: 
     if each in k: 
      countries.append(v) 

Résultats: Il wasnt assigner le dictionnaire de la ville un par un au lieu li piquent toutes les clés plusieurs fois

sortie souhaitée:

lst  countries 
Paris  France 
Paris  France 
Monaco  France 
Milan  Italy 
London  England 
...   ... 

Toutes les idées?

+0

Pourquoi avez-vous ce format dans votre dictionnaire? Pourquoi ne pas faire les villes ** clés ** séparées et dupliquer les valeurs? –

+0

suppose que j'ai beaucoup de clés et de valeurs dans mon dictionnaire et difficile de faire des clés séparées avec des valeurs dupliquées –

+0

Il est * pas * difficile de faire un nouveau dictionnaire avec des clés séparées. Si vous avez beaucoup de clés et de valeurs, c'est * d'autant plus important * que vous évitez d'avoir à boucler toutes les clés tout le temps. –

Répondre

1

Je vous suggère d'aplatir les clés du dictionnaire. Les valeurs Duplication dans les clés ne sont pas un problème:

dictionary = {k: v for tup, v in dictionary.items() for k in tup} 

Utilisez ensuite le nouveau dictionnaire pour facilement construire votre liste:

countries = [dictionary[city] for city in lst] 

Vous pouvez faire correspondre côté ville et pays côte à côte comme ceci:

for city, country in zip(lst, countries): 
    print(city, country) 

ou sans la construction de la nouvelle liste countries, vous pouvez utiliser directement le nouveau dictionnaire:

for city in lst: 
    print(city, dictionary[city]) 
+0

cela fonctionne, je pense que le chaînon manquant est que je ne savais pas comment aplatir les clés du dictionnaire. Merci. –