Python词典操作列表[关闭]

问题描述 投票:0回答:1

我最近制作的当前个人脚本存在问题,该脚本使用了一系列词典以及如何实现某种类型的结构。

这是原始结构:

[
{'airfare': 1000, 'place': 'nameOfPlace', 'email_to': '[email protected], [email protected]'},
{'airfare': 2000, 'place': 'nameOfPlace', 'email_to': '[email protected]'},
{'airfare': 3000, 'place': 'nameOfPlace', 'email_to': '[email protected]'},
{'airfare': 4000, 'place': 'nameOfPlace', 'email_to': '[email protected]'}
]

我希望实现这样的目标,我不知道这是否可行:

[{'email_to': '[email protected]',
    'flight_details':[{'airfare': 1000, 'place': 'nameOfPlace' },
                        {'airfare': 2000, 'place': 'nameOfPlace'}]},
{'email_to': '[email protected]',
    'flight_details':[{'airfare': 1000, 'place': 'nameOfPlace'},                                                            
                        {'airfare': 3000, 'place': 'nameOfPlace'}]},
{'email_to': '[email protected]',
    'flight_details':[{'airfare': 4000, 'place': 'nameOfPlace'}]}]

编辑:我正在使用python 3.5,我从sqlite数据库中获取数据。数据按原始结构存储在字典列表中,我希望根据我提供的第二个结构将其保存在json文件中。

python list dictionary data-manipulation
1个回答
1
投票

这会将字典操作为您需要的格式。但是以json出口可能是另一个问题。

d = [
{'airfare': 1000, 'place': 'nameOfPlace', 'email_to': '[email protected], [email protected]'},
{'airfare': 2000, 'place': 'nameOfPlace', 'email_to': '[email protected]'},
{'airfare': 3000, 'place': 'nameOfPlace', 'email_to': '[email protected]'},
{'airfare': 4000, 'place': 'nameOfPlace', 'email_to': '[email protected]'}
]

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>>,
#             {'[email protected]': defaultdict(list,
#                          {'flight_details': [{'airfare': 1000,
#                             'place': 'nameOfPlace'},
#                            {'airfare': 3000, 'place': 'nameOfPlace'}]}),
#              '[email protected]': defaultdict(list,
#                          {'flight_details': [{'airfare': 4000,
#                             'place': 'nameOfPlace'}]}),
#              '[email protected]': defaultdict(list,
#                          {'flight_details': [{'airfare': 1000,
#                             'place': 'nameOfPlace'},
#                            {'airfare': 2000, 'place': 'nameOfPlace'}]})})
© www.soinside.com 2019 - 2024. All rights reserved.