开发者社区 问答 正文

如何在python中返回特定格式的字典列表

[{'pf': 'ABC', 'src': 'SCI'}, {'pf': 'ABC', 'src': 'MC'}, {'pf': 'ASR', 'src': 'CC'}, {'pf': 'ASR', 'src': 'CC'}, {'pf': 'ASR', 'src': 'ACS'}, {'pf': 'ABC', 'src': 'CC'}, {'pf': 'NS', 'src': 'ATT'}]

有可能像这样得到上述字典的输出吗?

{
platform:all,
customers:[{
    pf:ABC,
    src:[SCI,MC,CC]
},{
    pf:ASR,
    src:[CC,ACS] #CC - duplicates of ASR are removed
],{
    pf:NS,
    src:[ATT]
}

我尝试使用defaultdict(list),这是没有用的,因为我想要的特定格式。任何帮助吗? 问题来源StackOverflow 地址:/questions/59379036/how-to-return-the-list-of-dictionary-in-specific-format-in-python

展开
收起
kun坤 2019-12-30 09:54:07 321 分享 版权
1 条回答
写回答
取消 提交回答
  • 元素的分组可以通过itertools完成。通过设置删除重复项。 例如:

    from pprint import pprint
    from itertools import groupby
    
    l = [{'pf': 'ABC', 'src': 'SCI'}, {'pf': 'ABC', 'src': 'MC'}, {'pf': 'ASR', 'src': 'CC'}, {'pf': 'ASR', 'src': 'CC'}, {'pf': 'ASR', 'src': 'ACS'}, {'pf': 'ABC', 'src': 'CC'}, {'pf': 'NS', 'src': 'ATT'}]
    
    out = {'customers': [], 'platform': 'all'}
    for v, g in groupby(sorted(l, key=lambda k: k['pf']), lambda k: k['pf']):
        out['customers'].append( {'pf': v, 'src': list(set(val['src'] for val in g))} )
    
    pprint(out)
    

    打印:

    {'customers': [{'pf': 'ABC', 'src': ['MC', 'SCI', 'CC']},
                   {'pf': 'ASR', 'src': ['ACS', 'CC']},
                   {'pf': 'NS', 'src': ['ATT']}],
     'platform': 'all'}
    
    2019-12-30 09:54:13
    赞同 展开评论