我需要将以下列表格式解析为dict。
这代表2个人,每个人有3个数据,名字,姓氏和&电子邮件。
data = [3, 'firstname', 'lastname', 'email', 2, 'jack', 'black', 'jb@example.com', 'jane', 'green', 'jg@examlpe.com']
data [0]是发送的人员字段数。 (3)
接下来的3个项目是属性名称。
在实际人员数据开始之前,2表示要跟随的人数。
我是Python的新手,我想知道是否有一种灵活的方式来做到这一点。我觉得必须有一个更好的方式。
(未经测试的代码,只显示我能想到的唯一方法)
def formatPeople(self, data):
param_count = data[0]
keys = []
pos = 1
while pos <= param_count:
keys.append(data[pos])
pos += 1;
people_count = int(data[pos])
pos += 1
people = []
i = 0
while i < people_count:
people_data = {}
for x in keys:
people_data[keys[x]] = data[pos]
pos += 1
people.append(people_data)
return people
答案 0 :(得分:3)
这是一个使用迭代器的好列表:
>>> i = iter(data)
>>> attr = [next(i) for x in range(next(i))]
>>> [{x:next(i) for x in attr} for y in range(next(i))]
[{'lastname': 'black', 'email': 'jb@example.com', 'firstname': 'jack'}, {'lastname': 'green', 'email': 'jg@examlpe.com', 'firstname': 'jane'}]
答案 1 :(得分:0)
这对于列表理解来说是一个很好的工作。单线也是。 :)
people = [{data[j]: data[data[0] * (i + 1) + j + 1] for j in xrange(1, data[0] + 1)} for i in xrange(0, data[data[0] + 1])]