如何在python中以特定格式返回字典列表[关闭]

问题描述 投票:-2回答:3
[{'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),由于我想要的特定格式,它没有用。有帮助吗?
python
3个回答
2
投票
元素的分组可以通过itertools.groupby完成,通过set删除重复项。

例如:

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'}


0
投票
如果要使用默认字典,则可以编写如下内容。

from collections import defaultdict from pprint import pprint 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'}] # use of set so that we have only unique values of 'src' for respective 'pf' pf_dict = defaultdict(set) for data_dict in l: # with default dict if key does not exist it will create a key in dict with # one element in set, and if key is present it will add new value to already # existing set against this key. pf_dict[data_dict['pf']].add(data_dict['src']) customers = [] # converting all sets of 'src' against respective 'pf' to list for key,value in pf_dict.items(): customers.append({'pf':key, 'src': list(value)}) result = { 'platform': 'all', 'customers': customers } pprint(result)


0
投票
我喜欢安德烈的答案。

自从您提到defaultdict,以下是使用它来避免重复的方法

from collections import defaultdict from pprint import pprint ds = [ {'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'} ] pfs = defaultdict(set) for e in ds: pfs[e['pf']].add(e['src']) pprint(pfs) out = {'customers': [{'pf': k, 'src': i} for k,i in pfs.items()], 'platform': 'all'} pprint(out)

产生

defaultdict(<class 'set'>, {'ABC': {'MC', 'SCI', 'CC'}, 'ASR': {'ACS', 'CC'}, 'NS': {'ATT'}}) {'customers': [{'pf': 'ABC', 'src': {'MC', 'SCI', 'CC'}}, {'pf': 'ASR', 'src': {'ACS', 'CC'}}, {'pf': 'NS', 'src': {'ATT'}}], 'platform': 'all'}

© www.soinside.com 2019 - 2024. All rights reserved.