2017-10-16 8 views
-1

キーなど、複数のタプルとのマッピング辞書:のPython 3.xの私はキーとして複数のタプルを含む辞書を持って

lst = ['Paris','Paris','Monaco','Milan','London',...] 
:上記の辞書に都市名の多くのリストをマッピングする方法

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

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

結果::

私はこれを試してみましたそれは都市辞書一つずつ代わりに李を割り当てる波平すべてのキーを複数回刺す

所望の出力:

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

任意のアイデア?

+0

なぜあなたの辞書にその形式がありますか?都市を**別個の**鍵と重複した価値にするのはいかがですか? –

+0

辞書にキーと値がたくさんあり、重複した値で別のキーを作るのが難しいと仮定します –

+0

別のキーで新しい辞書を作るのは難しくありません。多くのキーと値を持っているなら、それはもっと重要です*すべてのキーを常にループする必要はありません。 –

答えて

1

辞書キーをフラットにすることをお勧めします。キー全体に値を複製することは問題ではありません。

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

その後、あなたのリストを構築簡単に新しい辞書を使用します。

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

あなたがそうのような側面で都市と国側を一致させることができます。

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

たり、新しいcountriesリストを作成せずに、直接新しい辞書を使用することができます。

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

それは動作します、私は欠けているリンクが私が辞書のキーを平らげる方法を知らなかったと思います。ありがとう。 –

関連する問題