2014-01-21 38 views
0

我有字典的名單,每部詞典有物業PERSON_ID組列表中與同一個屬性值字典的名單列表

[{'person_id': 1, 'something..': 'else'}, {'person_id': 3, 'something..': 'else'}, {'person_id': 1, 'something..': 'else'}] 

如何組相同的「PERSON_ID」所有詞典到列表和分裂以前詞典列表(內部列表僅包含具有相同'person_id'的詞典)。

[[{'person_id': 1, 'something..': 'else'}, {'person_id': 1, 'something..': 'else'}], [{'person_id': 3, 'something..': 'else'}]] 

我做了這個簡單的迭代和檢查已經列出這些字典,但在Python中有效的方式?

回答

4

您的輸入不被person_id排序,所以使用collections.defaultdict()方法與一個循環:

from collections import defaultdict 

grouped = defaultdict(list) 

for person in inputlist: 
    grouped[person['person_id']].append(person) 

grouped = grouped.values() 

這個排序輸入列表轉換桶,那麼所有的桶放置回外部列表。如果需要輸出由ID進行排序,你可以使用:

grouped = [grouped['pid'] for pid in sorted(grouped)] 

如果需要排序的順序最初的名單,還是可以產生它的排序順序,您也可以使用itertools.groupby()做你的分組:

from itertools import groupby 
from operator import itemgetter 

grouped = [list(g) for p, g in groupby(inputlist, key=itemgetter('person_id'))] 

但這需要inputlist首先排序。

+0

@flornquake:實際上,它們是排序的。 –

+0

不在第一行代碼中。 (對不起,我在看到你的答案之前刪除了我的第一條評論) – flornquake

+0

@flornquake:ick,我錯過了那一個。 –

相關問題