2016-06-28 8 views
-1

私はこのような辞書のリストを持っている:1つの値が異なる辞書のリストの中で1つの辞書を選択するにはどうすればよいですか?

xyz =[ {"key1":"1","key2":"2","key3":"x_1"},{"key1":"1","key2":"2","key3":"x_2"},{"key1":"1","key2":"2","key3":"x_3"},{"key1":"5","key2":"6","key3":"y_1"},{"key1":"5","key2":"6","key3":"y_2"},{"key1":"5","key2":"6","key3":"y_3"}] 

私はすべてのユニークな「キー1」の値の最初の辞書を選択しようとしています。私のように出力を期待しています上記のdictの場合:

xyz=[{"key1":"1","key2":"2","key3":"x_1"},{"key1":"5","key2":"6","key3":"y_1"},] 

私は、次のコードを試してみました:

dictout = [dict(sample) for sample in set(tuple(item.items()) for item in xyz)] 

をしかし、私はなってしまった:

[{'key3': 'x_1', 'key2': '2', 'key1': '1'}, {'key3': 'x_3', 'key2': '2', 'key1': '1'}, {'key3': 'y_2', 'key2': '6', 'key1': '5'}, {'key3': 'x_2', 'key2': '2', 'key1': '1'}, {'key3': 'y_1', 'key2': '6', 'key1': '5'}, {'key3': 'y_3', 'key2': '6', 'key1': '5'}] 

は私が構築することはできませんよ"key1"の値に基づいて一意のdicts。

誰かが私にアプローチするアイデアを与えるのは素晴らしいことです。

ありがとうございます。

+0

をのでwhat'veあなたがしようとしましたか? –

+0

*最初のものである必要がありますか?そして/またはあなたはその注文を気にしていますか? '{d ['key1']:dはxyzのdのために}'重複排除し、任意にそれをリストに戻すことができます(→ '.values()')。 – deceze

+1

あなたのためにいくつかのコードを書きたいと思うようです。多くのユーザーは、苦労しているコーダーのコードを作成したいと考えていますが、通常は、ポスターがすでに問題を解決しようとしているときにのみ役立ちます。この努力を実証する良い方法は、これまでに書いたコード、サンプル入力(もしあれば)、予想される出力、実際に得られる出力(コンソール出力、トレースバックなど)を含めることです。あなたが提供する詳細があれば、受け取る可能性の高い回答が増えます。 [FAQ]と[ask]を確認してください。 –

答えて

3

あなたはitertoolsライブラリからgroupbyを使用することができます:あなたはまた、operatorからitemgetterを使用することができます

result = [list(value) for key, value in itertools.groupby(xyz, lambda x: x["key1"])] 

import itertools 

xyz =[ {"key1":"1","key2":"2","key3":"x_1"},{"key1":"1","key2":"2","key3":"x_2"}, 
     {"key1":"1","key2":"2","key3":"x_3"},{"key1":"5","key2":"6","key3":"y_1"}, 
     {"key1":"5","key2":"6","key3":"y_2"},{"key1":"5","key2":"6","key3":"y_3"}] 

result = [] 
for key, value in itertools.groupby(xyz, lambda x: x["key1"]): 
    result.append(list(value)) 

print([x[0] for x in result]) 

出力:リスト内包と

[{'key1': '1', 'key2': '2', 'key3': 'x_1'}, {'key1': '5', 'key2': '6', 'key3': 'y_1'}] 

あるいは図書館:

import operator 
import itertools 

result = [list(value) for key, value in itertools.groupby(xyz, operator.itemgetter("key1")] 

あなたは、あまりにも別の辞書を使用することができます。

d = {} 
for key, value in itertools.groupby(xyz, lambda x: x["key1"]): 
    d[key] = list(value) 

print([value[0] for key, value in sorted(d.items())]) 
関連する問題