0

我有一个由各种子数组组成的数组,例如:

[{'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'}}
4

2 回答 2

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'}}
于 2012-08-14T22:21:05.160 回答
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)     
于 2012-08-14T22:20:23.537 回答