3

キー「user」が同じリストの辞書に参加したいのですが、どうすればいいのかわかりません。例えば:

[{'count2': 34, 'user': 2},
 {'count4': 233, 'user': 2},
 {'count2': 234, 'user': 4},
 {'count4': 344, 'user': 5}]

次のようになります:

[{'count2': 34, 'count4': 233, 'user': 2 },
 {'count2': 234, 'user': 4},
 {'count4': 344, 'user': 5}]

スタックオーバーフローで似たようなものを見つけることなく広範囲に検索しました。助けていただければ幸いです。

4

4 に答える 4

7
from collections import defaultdict

dl = [{'count2': 34, 'user': 2},
{'count4': 233, 'user': 2},
{'count2': 234, 'user': 4},
{'count4': 344, 'user': 5}]
print dl

dd = defaultdict(dict)
for d in dl:
    dd[d['user']].update(d)
print dd.values()
于 2012-07-18T16:20:48.233 に答える
3

ソートしてからgroupbyを使用してからマージできます

from itertools import groupby
def merge(dicts):
    ret = {}
    for d in dicts:
        ret.update(d)
    return ret

d = [...]
sorted_d = sorted(d, key=lambda x: x['user'])
grouped_d = itertools.groupby(sorted_d, key=lambda x: x['user'])
print [merge(y[1]) for y in grouped]
于 2012-07-18T16:20:10.807 に答える
1

このようなものがうまくいくはずです。しかし、おそらくもっと効率的な方法があります(そしてより少ない行で)...

# Input
a=[{'count2': 34, 'user': 2},
 {'count4': 233, 'user': 2},
 {'count2': 234, 'user': 4},
 {'count4': 344, 'user': 5}]

# Get set of unique users
u=list(set([x['user'] for x in a]))

# Create a blank list of dictionaries for the result
r=[{}] * len(u)

# Iterate over input and add the dictionaries together
for x in a:
    r[u.index(x['user'])] = dict(r[u.index(x['user'])].items() + x.items())


>>> r
[{'count2': 34, 'user': 2, 'count4': 233}, {'count2': 234, 'user': 4}, {'count4': 344, 'user': 5}]
于 2012-07-18T16:25:13.237 に答える
1

配列内:

[{'count2': 34, 'user': 2},
 {'count4': 233, 'user': 2},
 {'count2': 234, 'user': 4},
 {'count4': 344, 'user': 5}]

そのようなa = {'count2': 34, 'user': 2}b = {'count4': 233, 'user': 2}

dict(a.items() + b.items())

戻ります:

{'count2': 34, 'count4': 233, 'user': 2 }

編集: グループの作業:

http://codepad.org/ObWT2Hl3

于 2012-07-18T16:06:32.950 に答える