从现有列表派生的词典理解

2024-04-19 23:30:03 发布

您现在位置:Python中文网/ 问答频道 /正文

作为一个更大练习的一部分,我正在尝试基于较小列表的输入构建一个字典,但是正在努力进行嵌入式迭代。假设我有以下示例:

cities = ['newyork','london','tokyo','paris']
citypairs = [i for i in it.combinations(cities,2)]
airlines = ['delta', 'united']

我想构建一个字典字典“info”,它的键是上面城市+每个航空公司的组合(总共12个键),每个键都包含一个“city1”和一个“city2”键,使用citypairs列表填充。我在尝试这样的事情:

info = {
'{city1}/{city2} {airline}'.format(city1=city1, city2=city2, airline=airline): {
    "city1": city1, "city2": city2
    for city1, city2 in citypairs
    }
    for city1, city2 in citypairs
    for airline in airlines 
   } 

但是我收到一个无效的语法错误。为了更清楚地说明我所追求的是什么,如果不是上述尝试,我会:

info = {
'{city1}/{city2} {airline}'.format(city1=city1, city2=city2, airline=airline): {
    "city1": "whatever", "city2": "whatever"
    }
    for city1, city2 in citypairs
    for airline in airlines 
   } 

然后,它将运行并为“info”中的每个键为city1和city2创建“whatever”的伪值

这个例子可能看起来很愚蠢或过于复杂,但我的问题的核心是如何遍历一个元组列表来填充这个例子中的city1和city2——我追求这个,因为我正在从事的实际项目需要这种灵活性


Tags: ininfoformat示例列表for字典例子
2条回答

我相信解决方案比你想的要简单:

from itertools import combinations

cities = ['newyork','london','tokyo','paris']
citypairs = combinations(cities, 2)
airlines = ['delta', 'united']

info = {'{city1}/{city2} {airline}'.format(city1=city1, city2=city2, airline=airline): {"city1": city1, "city2": city2}
    for city1, city2 in citypairs
        for airline in airlines 
} 

print(info)
print()
print(info["newyork/london delta"]["city1"])

输出

{'伦敦/东京三角洲':{'city1':'伦敦','city2':'东京'},'纽约/伦敦三角洲':{'city1':'纽约','city2':'伦敦'},'伦敦/巴黎三角洲':{'city1':'伦敦','city2':'巴黎'},'伦敦/东京联合':{'city1':'伦敦','city2':'东京'},'东京/巴黎联合':{'city1':'东京','city2':'巴黎'},'纽约/巴黎三角洲':{'city1':'newyork','city2':'paris'},'东京/巴黎三角洲':{'city1':'tokyo','city2':'paris'},'纽约/巴黎联合':{'city1':'newyork','city2':'paris'},'伦敦/巴黎联合':{'city1':'london','city2':'paris'},'纽约/伦敦联合':{'city1':'newyork','city2':'london'},'纽约/东京三角洲':{'城市1':'纽约','城市2':'东京'},'纽约/东京联合':{'城市1':'纽约','城市2':'东京'}

纽约

info = {
'{city1}/{city2} {airline}'.format(**vars()) : 
    { "city1": city1, "city2": city2 }
    for city1, city2 in citypairs
    for airline in airlines 
   }

收益率:

{'london/paris delta': {'city1': 'london', 'city2': 'paris'},
 'london/paris united': {'city1': 'london', 'city2': 'paris'},
 'london/tokyo delta': {'city1': 'london', 'city2': 'tokyo'},
 'london/tokyo united': {'city1': 'london', 'city2': 'tokyo'},
 'newyork/london delta': {'city1': 'newyork', 'city2': 'london'},
 'newyork/london united': {'city1': 'newyork', 'city2': 'london'},
 'newyork/paris delta': {'city1': 'newyork', 'city2': 'paris'},
 'newyork/paris united': {'city1': 'newyork', 'city2': 'paris'},
 'newyork/tokyo delta': {'city1': 'newyork', 'city2': 'tokyo'},
 'newyork/tokyo united': {'city1': 'newyork', 'city2': 'tokyo'},
 'tokyo/paris delta': {'city1': 'tokyo', 'city2': 'paris'},
 'tokyo/paris united': {'city1': 'tokyo', 'city2': 'paris'}}

在这里,我使用了更简洁的format()形式,它查看局部变量以查找格式字符串的内容。你知道吗

你很接近你想要的东西。不知道为什么要用"whatever"输入第二级dict的值,因为您已经在理解中生成了city1city2变量。只用这些就完成了电路。你知道吗

相关问题 更多 >