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 に答える