我最近制作的当前个人脚本存在问题,该脚本使用了一系列词典以及如何实现某种类型的结构。
这是原始结构:
[
{'airfare': 1000, 'place': 'nameOfPlace', 'email_to': 'yahooEmail@yahoo.com, gmailEmail@gmail.com'},
{'airfare': 2000, 'place': 'nameOfPlace', 'email_to': 'yahooEmail@yahoo.com'},
{'airfare': 3000, 'place': 'nameOfPlace', 'email_to': 'gmailEmail@gmail.com'},
{'airfare': 4000, 'place': 'nameOfPlace', 'email_to': 'liveEmail@live.com'}
]
我希望实现这样的目标,我不知道这是否可能:
[{'email_to': 'yahooEmail@yahoo.com',
'flight_details':[{'airfare': 1000, 'place': 'nameOfPlace' },
{'airfare': 2000, 'place': 'nameOfPlace'}]},
{'email_to': 'gmailEmail@gmail.com',
'flight_details':[{'airfare': 1000, 'place': 'nameOfPlace'},
{'airfare': 3000, 'place': 'nameOfPlace'}]},
{'email_to': 'liveEmail@live.com',
'flight_details':[{'airfare': 4000, 'place': 'nameOfPlace'}]}]
编辑: 我使用python 3.5并从sqlite数据库中获取数据。根据 原始结构 ,数据存储在字典列表中,我希望根据我提供的第二个结构将其保存在json文件中。
答案 0 :(得分:1)
这会将字典操作为您需要的格式。但是以json出口可能是另一个问题。
d = [
{'airfare': 1000, 'place': 'nameOfPlace', 'email_to': 'yahooEmail@yahoo.com, gmailEmail@gmail.com'},
{'airfare': 2000, 'place': 'nameOfPlace', 'email_to': 'yahooEmail@yahoo.com'},
{'airfare': 3000, 'place': 'nameOfPlace', 'email_to': 'gmailEmail@gmail.com'},
{'airfare': 4000, 'place': 'nameOfPlace', 'email_to': 'liveEmail@live.com'}
]
from collections import defaultdict
d_new = defaultdict(lambda: defaultdict(list))
for i in d:
i['email_to'] = i['email_to'].split(', ')
for email in i['email_to']:
d_new[email]['flight_details'].append({'airfare': i['airfare'], 'place': i['place']})
d_new
# defaultdict(<function __main__.<lambda>>,
# {'gmailEmail@gmail.com': defaultdict(list,
# {'flight_details': [{'airfare': 1000,
# 'place': 'nameOfPlace'},
# {'airfare': 3000, 'place': 'nameOfPlace'}]}),
# 'liveEmail@live.com': defaultdict(list,
# {'flight_details': [{'airfare': 4000,
# 'place': 'nameOfPlace'}]}),
# 'yahooEmail@yahoo.com': defaultdict(list,
# {'flight_details': [{'airfare': 1000,
# 'place': 'nameOfPlace'},
# {'airfare': 2000, 'place': 'nameOfPlace'}]})})