2017-10-16 102 views
-1

我有一个包含多个元组作为键的字典:的Python 3.X - 映射字典,多个元组作为键

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

如何与很多城市名称的映射列表上面的词典:

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

我已经试过这样:

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

它的工作原理,我认为缺少的链接是我不知道如何压扁字典键。谢谢。 –