我有一个由不同子数组组成的数组,如:
[{'x':'xvalue', 'y':'yvalue', 'group':'groupname'}...{'x':'xnvalue', 'y':'ynvalue', 'group':groupnname'}]
我想以下列形式创建一个新数组或序列化相同的数组:
[{'groupa':['x':'xvalue', 'y':'yvalue'}}...{'groupn':{'x':'xnvalue', 'y':'ynvalue'}]
抱歉以非常奇怪的方式提出问题,但没有更好地解释这个问题。
我首选的脚本语言是python。
示例数据:
{"id":"jMGTsJXWiI","key":"s1","value":{'group' : "x", 't':'45', 'xs':'x5e8'}}
{"id":"545sJXWiI","key":"s3","value":{'group' : "x", 't':'415', 'xs':'xr58'}}
{"id":"xjMdT45","key":"s2","value":{'group' : "y", 't':'405', 'xs':'xs58'}}
答案 0 :(得分:1)
假设您的数据确实是一个字典列表,这将起作用:
>>> groups
[{'y': 'yvalue', 'x': 'xvalue', 'group': 'groupname'}, {'y': 'ynvalue', 'x': 'xnvalue', 'group': 'groupnname'}]
>>> final_groups = {grp.pop('group'):grp for grp in groups}
>>> final_groups
{'groupname': {'y': 'yvalue', 'x': 'xvalue'}, 'groupnname': {'y': 'ynvalue', 'x': 'xnvalue'}}
由于字典理解,这假定为2.7+。如果是2.6-,那么
>>> final_groups = dict((grp.pop('group'),grp) for grp in groups)
编辑
回答评论中的问题。
不,没有import group
。这是完整的脚本:
>>> groups = [{'x':'xvalue', 'y':'yvalue', 'group':'groupname'},{'x':'xnvalue', 'y':'ynvalue', 'group':'groupnname'}]
>>> final_groups = dict((grp.pop('group'),grp) for grp in groups)
>>> final_groups
{'groupname': {'y': 'yvalue', 'x': 'xvalue'}, 'groupnname': {'y': 'ynvalue', 'x': 'xnvalue'}}
{...}
具体为2.7+。它被称为词典理解,如果你的python版本低于2.7那么你不能这样做,而是可以像我上面列出的那样。
编辑2
如下:
final_groups = dict(
[
('%s.%s' % (item['value'].pop('group'), item['key']), item['value']) for item in groups
]
)
<强>输出强>
{'y.s2': {'xs': 'xs58', 't': '405'}, 'x.s3': {'xs': 'xr58', 't': '415'}, 'x.s1': {'xs': 'x5e8', 't': '45'}}
答案 1 :(得分:0)
一衬垫:
>>> lis=[{'x':'xvalue', 'y':'yvalue', 'group':'groupname'},{'x':'xnvalue', 'y':'ynvalue', 'group':'groupnname'}]
>>> [{x['group']:{y:x[y] for y in x if y !='group'} for x in lis}]
[{'groupname': {'y': 'yvalue', 'x': 'xvalue'}, 'groupnname': {'y': 'ynvalue', 'x': 'xnvalue'}}]
使用for循环:
lis=[{'x':'xvalue', 'y':'yvalue', 'group':'groupname'},{'x':'xnvalue', 'y':'ynvalue', 'group':'groupnname'}]
lis1=[{} for _ in range(len(lis))] # lis1= [{},{}]
for i,x in enumerate(lis):
lis1[i][x['group']]={} #creates lis1[{'groupname':{}}]
for y in x:
if y!='group':
lis1[i][x['group']][y]=x[y] #add values to lis1[{'groupname':{}}]
print(lis1)