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

Python 从现有列表派生的词典理解,python,list,python-2.7,dictionary,Python,List,Python 2.7,Dictionary,作为一个更大练习的一部分,我正在尝试基于较小列表的输入构建一个字典,但正在努力进行嵌入式迭代。假设我有以下示例: cities = ['newyork','london','tokyo','paris'] citypairs = [i for i in it.combinations(cities,2)] airlines = ['delta', 'united'] 我想构建一个字典字典“info”,它的键是上面的城市+每个航空公司的组合(总共12个键),每个键都包含一个“city1”和一个“

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

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?我想这样做是因为我正在从事的实际项目需要这种灵活性

我相信解决方案比你所做的更简单:

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':'london','city2':'tokyo'},{'city1':'newyork','city2':'london'},{'city1':'london','city2':'paris'},{'city1':'london','city2':'tokyo'},{'toky{'city1':'纽约','city2':'巴黎','东京/巴黎三角洲':{'city1':'东京','city2':'巴黎','纽约/巴黎联合':{'city1':'纽约','city2':'巴黎','伦敦/巴黎联合':{'city1':'伦敦','city2':'巴黎','纽约/伦敦联合':{'city1':'纽约':'伦敦','纽约/东京三角洲':{'city1':'newyork','city2':'tokyo'},'newyork/tokyo united':{'city1':'newyork','city2':'tokyo'}


纽约

我的信念是,解决方案比你所做的要简单:

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':'london','city2':'tokyo'},{'city1':'newyork','city2':'london'},{'city1':'london','city2':'paris'},{'city1':'london','city2':'tokyo'},{'toky{'city1':'纽约','city2':'巴黎','东京/巴黎三角洲':{'city1':'东京','city2':'巴黎','纽约/巴黎联合':{'city1':'纽约','city2':'巴黎','伦敦/巴黎联合':{'city1':'伦敦','city2':'巴黎','纽约/伦敦联合':{'city1':'纽约':'伦敦','纽约/东京三角洲':{'city1':'newyork','city2':'tokyo'},'newyork/tokyo united':{'city1':'newyork','city2':'tokyo'}

纽约

info={
“{city1}/{city2}{airline}”。格式(**vars()):
{“city1”:city1,“city2”:city2}
城市空气中的城市1、城市2
航空公司中的航空公司
}
收益率:

{'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
输入值,因为你已经在理解中生成了
city1
city2
变量。只要使用这些变量就完成了电路。

info={
“{city1}/{city2}{airline}”。格式(**vars()):
{“city1”:city1,“city2”:city2}
城市空气中的城市1、城市2
航空公司中的航空公司
}
收益率:

{'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()
,它查看局部变量以查找格式字符串的内容


您的要求与您的要求非常接近。不确定您为什么将第二级
dict
s的值归档为
“随便什么”
,因为您已经在理解中生成了
city1
city2
变量。仅使用这些变量就完成了电路。

所需的
info
值是什么?错误的语法是
{“city1”:city1,“city2”:city2代表city1,city2代表citypairs}
。那应该是什么?一本字典,每个条目有两个条目?或者你只是想把这两个条目作为单独的条目添加,比如
{k:v代表城市1,城市2中的城市代表k,v代表(('city1',city1),('city2',city2))}
?所需的示例:info[newyork/london delta][city1]将等于“newyork”和…[city2]将等于“伦敦”。
info
的期望值是多少?错误的语法是
{“city1”:city1,“city2”:city2代表city1,citypyairs中的city2}
。这应该是什么?一个每个条目有两个条目的字典?还是您只想将这两个条目作为单独的条目添加,如
{k:v代表城市1,城市中的城市2代表城市k,v代表(('city1',city1),('city2',city2))
?所需内容示例:信息[newyork/london delta][city1]将等于“newyork”,而…[city2]将等于“london”。