2017-08-03 8 views
0

私は2つの別々のフィールドにグループ化したいレコードグループを持っています。各レコードはPython辞書です。フィールドの1つは日付値で、もう1つは数値フィールドです。私は一緒にグループ特定のグループに望んでいた場合フィールドごとにpythonグループレコード

h = [{'date': 20170728, 'group': 121, ...}, 
    {'date': 20170729, 'group': 131, ...}, 
    ...] 

さてすなわち,:、[123、134、145]であるが、同じ日付を持つ任意の基、それら一緒に言うが、他のすべてのグループは、グループ化されます一緒に一緒に、私はこれをどのように達成するだろうか?ならないグループ123、134で

grouped_list = [ 
       [records that have a distinct date value and group], 
       [records that have a distinct date but are in the group [123, 134, 145], 
       etc.] 

レコード、および145:

grouped_list = [] 
for date, items in groupby(h, key=itemgetter('date'): 
    g = list(items) 
    grouped_list.append(g) 
は私が探している出力は以下の通りです

私は、次のコードを使用していますgrouped_listにそれぞれのリストがあります。それらはリストにまとめてグループ化する必要があります。

+0

をあなたは、出力の例を提供することができます」再探している? – cowbert

+0

'grouped_records = sorted(h、key = lambda x:x ['date'])'を使ってリストをソートするのはあなたのニーズに合っていますか?それとも他の何かを探していますか? –

+0

'collections.groupby'は連続したイテレータをグループ化することに注意してください。 dictsの反復順序は予測不可能なので、これは正しいアプローチではないかもしれません –

答えて

0

あなたがグループにあなたの記録を、キーを計算するために、カスタム関数を書くことができ、このような何か:

from itertools import groupby 

records = [ 
     {'date': 20170728, 'group': 121}, 
     {'date': 20170729, 'group': 131}, 
     {'date': 20170729, 'group': 134}, 
     {'date': 20170729, 'group': 145}, 
] 
grouped_groups = [123, 134, 145] 

def compute_groupby_key(entry): 
     return "%d-%d" % (
      entry['date'], 
      grouped_groups[0] if entry['group'] in grouped_groups else entry['group'] 
    ) 

grouped_records = [list(entries) for key, entries in groupby(records, compute_groupby_key)] 

ここgrouped_recordsは含まれています

[ 
    [{'date': 20170728, 'group': 121}], 
    [{'date': 20170729, 'group': 131}], 
    [{'date': 20170729, 'group': 134}, {'date': 20170729, 'group': 145}]] 
] 
関連する問題