【问题标题】:Python list of dictionaries manipulation [closed]字典操作的Python列表[关闭]
【发布时间】:2018-02-07 08:29:22
【问题描述】:

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

这是原来的结构:

[
{'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 文件中。

【问题讨论】:

  • 有可能,但您应该更清楚地说明您想要什么 - 我们正在谈论的是 json 吗?你试过吗?您使用的是哪种语言?

标签: python list dictionary data-manipulation


【解决方案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'}]})})

【讨论】:

  • jp_data_analysis,忘记导出到 JSON,您的答案绝对是我正在寻找的。我已经花了将近一个星期的时间来调整列表,而你只得到了 6 行代码,太棒了。一百万谢谢你。干杯!
猜你喜欢
  • 2016-03-15
  • 2015-07-27
  • 2018-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-30
  • 2019-01-29
  • 1970-01-01
相关资源
最近更新 更多