python:使用标题将列表与字典组合

问题描述 投票:4回答:3

我想将两个列表组合成一个字典类型。

Name = ['John','Mary','Serena','Felicia']
Data = ['26','179','25','164','29','149','29','167']

Json格式的理想输出

{"people":[{'Name': 'John',
     'Age': '26',
     'Height': '179'},
{'Name': 'Mary',
     'Age': '25',
     'Height': '164'}
{'Name': 'Serena',
     'Age': '29',
     'Height': '149'}
{'Name': 'Felicia',
     'Age': '29',
     'Height': '167'} ]
}    

我尝试与list1 = {k: 'Name' for k in Name}结合,但字典显示'John'='Name',这与我需要的相反。

python list dictionary
3个回答
4
投票

一些嵌套的拉链和切片可以在列表推导中构建dicts,作为外部字典的值:

Name = ['John','Mary','Serena','Felicia']
Data = ['26','179','25','164','29','149','29','167']

result = {'people':[{'Name' : name, 'Age' : age, 'Height' : height} 
          for name,(age,height) in zip(Name,zip(Data[::2],Data[1::2]))]}


print(result)

打印:

{'people': [{'Name': 'John', 'Height': '179', 'Age': '26'}, {'Name': 'Mary', 'Height': '164', 'Age': '25'}, {'Name': 'Serena', 'Height': '149', 'Age': '29'}, {'Name': 'Felicia', 'Height': '167', 'Age': '29'}]}

如果你不想创建“硬”切片,使用itertools.islice,将整数值转换为整数也会很有意思,这样可以避免以后对整数的字典比较的简单陷阱:

from itertools import islice
result = {'people':[{'Name' : name, 'Age' : int(age), 'Height' : int(height)}
          for name,age,height in zip(Name,islice(Data,None,None,2),islice(Data,1,None,2))]}

(还要感谢评论,不需要嵌套zip语句)

结果:

{'people': [{'Height': 179, 'Age': 26, 'Name': 'John'}, 
            {'Height': 164, 'Age': 25, 'Name': 'Mary'}, 
            {'Height': 149, 'Age': 29, 'Name': 'Serena'}, 
            {'Height': 167, 'Age': 29, 'Name': 'Felicia'}]}

1
投票

使用zip

Name = ['John','Mary','Serena','Felicia']
Data = ['26','179','25','164','29','149','29','167']

dct = {"people": [{'Name': i, 'Age': j, 'Height': k} for i, j, k in zip(Name, Data[::2], Data[1::2])]}
print(dct)

输出:

{'people': [{'Name': 'John', 'Age': '26', 'Height': '179'}, {'Name': 'Mary', 'Age': '25', 'Height': '164'}, {'Name': 'Serena', 'Age': '29', 'Height': '149'}, {'Name': 'Felicia', 'Age': '29', 'Height': '167'}]}

0
投票

这是一个有趣的方法。

>>> Name = ['John','Mary','Serena','Felicia']
>>> Data = ['26','179','25','164','29','149','29','167']
>>> keys = ['Name', 'Age', 'Height']
>>> it = iter(Data)
>>> {'people':[dict(zip(keys,i)) for i in zip(Name, it, it)]}

不能让它比这更紧凑。

产量

{'people': [{'Name': 'John', 'Age': '26', 'Height': '179'}, {'Name': 'Mary', 'Age': '25', 'Height': '164'}, {'Name': 'Serena', 'Age': '29', 'Height': '149'}, {'Name': 'Felicia', 'Age': '29', 'Height': '167'}]}
© www.soinside.com 2019 - 2024. All rights reserved.