Python 合并字典列表中的常用元素,并将不常用元素存储在新键中
我有一本很大的字典,里面有一系列的条目,这些都是无序的。我想将某些元素分组到一个新键中。比如说 输入=[{'name':'emp1','state':'TX','areacode':'001','mobile':123},{'name':'emp1','state':'TX','areacode':'002','mobile':234},{'name':'emp1','state':'TX','areacode':'003','mobile':345},{'name':'emp2','state':'TX','areacode':无,] 对于以上输入,我想在新的按键contactoptions中将区号和手机分组 我现在用两个长迭代来完成这项工作。我想更有效地实现同样的目标,因为记录的数量很大。开放使用现有方法(如果在pandas等软件包中可用)。试试看Python 合并字典列表中的常用元素,并将不常用元素存储在新键中,python,pandas,Python,Pandas,我有一本很大的字典,里面有一系列的条目,这些都是无序的。我想将某些元素分组到一个新键中。比如说 输入=[{'name':'emp1','state':'TX','areacode':'001','mobile':123},{'name':'emp1','state':'TX','areacode':'002','mobile':234},{'name':'emp1','state':'TX','areacode':'003','mobile':345},{'name':'emp2','state
result = (
df.groupby(['name', 'state'])
.apply(lambda x: x[['areacode', 'mobile']].to_dict(orient='records'))
.reset_index(name='contactoptions')
).to_dict(orient='records')
试一试
如您所问,您希望按“名称”和“状态”将输入项分组在一起 我的建议是,您可以制作一个字典,其中键为'name'加上'state',如'emp1 TX',值为'areacode'列表和'mobile',如[{'areacode':'001','mobile':123}]。在这种情况下,可以在一次迭代中获得输出 输出:
{'emp1-TX': [{'areacode':'001','mobile':123}, {'areacode':'001','mobile':123}, {'areacode':'003','mobile':345}], 'emp2-TX': [{'areacode':None,'mobile':None}]}
如您所问,您希望按“名称”和“状态”将输入项分组在一起 我的建议是,您可以制作一个字典,其中键为'name'加上'state',如'emp1 TX',值为'areacode'列表和'mobile',如[{'areacode':'001','mobile':123}]。在这种情况下,可以在一次迭代中获得输出 输出:
{'emp1-TX': [{'areacode':'001','mobile':123}, {'areacode':'001','mobile':123}, {'areacode':'003','mobile':345}], 'emp2-TX': [{'areacode':None,'mobile':None}]}
对于常规字典,您可以使用setdefault方法在单次传递/循环中完成,无需排序:
data = [{'name':'emp1','state':'TX','areacode':'001','mobile':123},{'name':'emp1','state':'TX','areacode':'002','mobile':234},{'name':'emp1','state':'TX','areacode':'003','mobile':345},{'name':'emp2','state':'TX','areacode':None,'mobile':None}]
merged = dict()
for d in data:
od = merged.setdefault(d["name"],{k:d[k] for k in ("name","state")})
od.setdefault("contactoptions",[]).append({k:d[k] for k in ("areacode","mobile")})
merged = list(merged.values())
输出:
print(merged)
# [{'name': 'emp1', 'state': 'TX', 'contactoptions': [{'areacode': '001', 'mobile': 123}, {'areacode': '002', 'mobile': 234}, {'areacode': '003', 'mobile': 345}]}, {'name': 'emp2', 'state': 'TX', 'contactoptions': [{'areacode': None, 'mobile': None}]}]
对于常规字典,您可以使用setdefault方法在单次传递/循环中完成,无需排序:
data = [{'name':'emp1','state':'TX','areacode':'001','mobile':123},{'name':'emp1','state':'TX','areacode':'002','mobile':234},{'name':'emp1','state':'TX','areacode':'003','mobile':345},{'name':'emp2','state':'TX','areacode':None,'mobile':None}]
merged = dict()
for d in data:
od = merged.setdefault(d["name"],{k:d[k] for k in ("name","state")})
od.setdefault("contactoptions",[]).append({k:d[k] for k in ("areacode","mobile")})
merged = list(merged.values())
输出:
print(merged)
# [{'name': 'emp1', 'state': 'TX', 'contactoptions': [{'areacode': '001', 'mobile': 123}, {'areacode': '002', 'mobile': 234}, {'areacode': '003', 'mobile': 345}]}, {'name': 'emp2', 'state': 'TX', 'contactoptions': [{'areacode': None, 'mobile': None}]}]