2009-08-17 11 views
1

初心者の質問。重複している辞書のリストは、別のリストに1つのエントリをコピーします。

私は入れ子の辞書のリストを持っているとしましょう。

a = [{"value1": 1234, "value2": 23423423421, "value3": norway, "value4": charlie}, 
    {"value1": 1398, "value2": 23423412221, "value3": england, "value4": alpha}, 
    {"value1": 1234, "value2": 23234231221, "value3": norway, "value4": charlie}, 
    {"value1": 1398, "value2": 23423213121, "value3": england, "value4": alpha}] 

私が望むのは、value1、value3、value4が一致する各複製のsingularisエントリを移動することです。結果は次のようになります。

b = [{"value1": 1398, "value2": 23423412221, "value3": england, "value4": alpha}, 
    {"value1": 1234, "value2": 23234231221, "value3": norway, "value4": charlie}] 

元のリストは、元の状態にとどまるはずです。

+0

あなたが重複している2つのディレクトリを定義する方法を教えてください。それらのすべての値は等しいか、単に "value1"か...か? –

+0

心配しないで、私はそれを解決しました。どうすれば削除できますか? –

+0

あなたはしません。あなたは他人に利益をもたらすようにあなたの答えを投稿します。 –

答えて

2

最近このような質問がありました。試してみてくださいentry

実際には、「値3と値4が他のネストされた辞書と同じである複数のエントリがあるとしましょう。それらの重複する辞書を簡単に見つけて削除するにはどうすればよいですか」

それは同じもののようですね、そうですか?

編集:自由にアレックスのコードを盗み、それはこのようなものになります。

import itertools 
import pprint 
import operator 

alpha, charlie, norway, england = range(4) 

a = [{"value1": 1234, "value2": 23423423421, "value3": norway, "value4": charlie}, 
    {"value1": 1398, "value2": 23423412221, "value3": england, "value4": alpha}, 
    {"value1": 1234, "value2": 23234231221, "value3": norway, "value4": charlie}, 
    {"value1": 1398, "value2": 23423213121, "value3": england, "value4": alpha}] 


getvals = operator.itemgetter('value1', 'value3', 'value4') 

a.sort(key=getvals) 

b = [g.next() for _, g in itertools.groupby(a, getvals)] 
pprint.pprint(b) 

を、結果は次のとおりです。

[{'value1': 1234, 'value2': 23423423421L, 'value3': 2, 'value4': 1}, 
{'value1': 1398, 'value2': 23423412221L, 'value3': 3, 'value4': 0}] 
+0

はい:)私の愚か。 –

関連する問題