列表格式中的嵌套词典



我有三个列表-名称1、名称2、距离-使用以下代码:

distdictionary = [{a: {b:c}} for a,b,c in zip(name1, name2, distance)]

我有一本字典,看起来像这样:

[{'name1': {'name2': 737}},{'name1': {'name2': 717}}, {'name1': {'name2': 749}}....etc]

我要找的是:

{'name1':{'name2': 737,'name2': 717, 'name2': 749}....etc]

name1与name2和距离有一对多的关系,它将是嵌套字典的开始。

添加一些显示列表的澄清/编辑:

name1    name2    distance  
-----    -----    --------   
John     Sarah    23  
John     Jane     64  
John     Anne     45  
David    Sarah    33  
David    Jane     56  
David    Anne     67  
Mike     Sarah    87  
Mike     Jane     24  
Mike     Anne     89  

嵌套字典应该如下所示:

{'John: {'Sarah': 23, 'Jane': 64, 'Anne': 45}, 
David: {'Sarah': 33, 'Jane': 56, 'Anne': 67},
Mike: {'Sarah': 87, 'Jane': 24, 'Anne': 89}}  

非常感谢您在这方面的帮助。。。。

您可以通过创建一个嵌套循环来绕过它,在它内部有一个临时字典,它会为name1中的每个唯一元素更新。

在下面的示例中,temp_dict1temp_dict2temp_dict3中的每一个都只由您应该创建的循环中的一个临时字典表示解释:

name1 =["John","John","John","David","David","David","Mike","Mike","Mike"]
name2 = ["Sarah","Jane","Anne","Sarah","Jane","Anne","Sarah","Jane","Anne"]
distance =[23,64,45,33,56,67,87,24,89]
temp_dict1 = {}
temp_dict2 = {}
temp_dict3 = {}
my_dict={}
temp_dict1[name2[0]]=distance[0]
temp_dict1[name2[1]]=distance[1]
temp_dict1[name2[2]]=distance[2]
my_dict[name1[0]]=temp_dict1
temp_dict2[name2[3]]=distance[3]
temp_dict2[name2[4]]=distance[4]
temp_dict2[name2[5]]=distance[5]
my_dict[name1[3]]=temp_dict2
temp_dict3[name2[6]]=distance[6]
temp_dict3[name2[7]]=distance[7]
temp_dict3[name2[8]]=distance[8]
my_dict[name1[6]]=temp_dict3

my_dict

输出为:

{'John': {'Sarah': 23, 'Jane': 64, 'Anne': 45},
'David': {'Sarah': 33, 'Jane': 56, 'Anne': 67},
'Mike': {'Sarah': 87, 'Jane': 24, 'Anne': 89}}

最终解决方案是:

name1 =["John","John","John","David","David","David","Mike","Mike","Mike"]
name2 = ["Sarah","Jane","Anne","Sarah","Jane","Anne","Sarah","Jane","Anne"]
distance =[23,64,45,33,56,67,87,24,89]
my_dict={}
start = 0
stop = 3
while start < len(name1):
temp_dict = {}
for i in range(start,stop):
temp_dict[name2[i]]=distance[i]
my_dict[name1[start]]=temp_dict
start = start + 3
stop = stop +3

首先,这里:

distdictionary = [{a: {b:c}} for a,b,c in zip(name1, name2, distance)]

您创建的是一个列表而不是一个字典,称之为字典可能会让人感到困惑。

name1列(它是一个列表(是否总是遵循相同的模式?每个名字重复三次?

最新更新