基于数组项重建/构建新数组

时间:2012-08-14 22:12:55

标签: python arrays serialization multidimensional-array

我有一个由不同子数组组成的数组,如:

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

2 个答案:

答案 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)