将单维列表解析为dict

时间:2011-12-04 19:50:49

标签: python list dictionary

我需要将以下列表格式解析为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

2 个答案:

答案 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])]