我正在尝试创建一个包含地址簿等条目的字典。我正在阅读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’}
}
答案 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}