在Python中用字典创建字典

时间:2015-08-21 22:04:10

标签: python dictionary

我正在尝试创建一个包含地址簿等条目的字典。我正在阅读re.compile中的一些数据。我获取不同组中的元素并将它们添加到字典中。但最后,我只剩下最后一个'人'了。它会覆盖所有其他条目。有没有办法用相同的密钥创建这个长记录列表?

addressbook = {}

format = re.compile(r'''(([A-Z][a-z]*)([\,][\s])([A-Z][a-z]*) 
    ([\,][\s])(\d{3})([\.])(\d{3})(\.)(\d{4})''', re.VERBOSE)

for q in format1.findall(data):
    lname = q[1] 
    addressbook['lastname'] = lname
    fname = q[3]
    addressbook['firstname'] = fname
    ph1 = q[5]
    ph2 = q[7]
    ph3 = q[9]
    phone = ph1 +  ph2  + ph3
    addressbook['phonenumber'] = phone   

我希望它看起来像这样:

{‘people’: 
{‘firstname’: ‘Joe’, ‘lastname’: ‘Smithe’, ‘phone’: ‘5563036594’}, 
{‘firstname’: ‘John’, ‘lastname’: ‘Lesley’, ‘phone’: ‘5961236448’},
{‘firstname’: ‘Betty’, ‘lastname’: ‘Larking’, ‘phone’: ‘3133426598’}
}

2 个答案:

答案 0 :(得分:0)

存储一个dicts列表,每个人一个:

addressbook = {"people": []}

for q in format1.findall(dataIn):
    d = {'lastname': q[1], 'firstname': q[3],
         d['phonenumber']: "{}{}{}".format(q[5], q[7], q[9])}
    addressbook["people"].append(d)

如果您有十个元素,可以解压缩:

addressbook = {"people": []}
for _, fn, _, ln, _, ph1, _, ph2, _, ph3 in format1.findall(dataIn):
    addressbook["people"].append({'lastname': ln, 'firstname': fn,
                                'phonenumber': ph1 + ph2 + ph3})

如果您在其他地方使用其他元素,请使用有用的名称替换每个_

答案 1 :(得分:0)

您需要一个清单:

people_format = re.compile(r'''([A-Z][a-z]*)(?:,\s)([A-Z][a-z]*) 
    (?:,\s)(\d{3})(?:\.)(\d{3})(?:\.)(\d{4})''', re.VERBOSE)

people = []
for lastname, firstname, ph1, ph2, ph3 in people_format.findall(data):
    people.append({
        'lastname': lastname,
        'firstname': firstname,
        'phonenumber': ph1 + ph2 + ph3
    })
addressbook = {'people': people}