2016-08-08 21 views
0

から値により、重複項目を削除します。私は、次の辞書を持っている辞書

potential_duplicates = { 
    432L: (u'one two three', u'one two three'), 
    433L: (u'one two three', u'one two three'), 
    434L: (u'whole foods', u'whole foods'), 
    435L: (u'whole foods', u'whole foods'), 
    437L: (u'this is a dupe', u'this is a dupe'), 
    438L: (u'this is a dupe', u'this is a dupe'), 
    439L: (u'this is a dupe', u'this is a dupe') 
} 

は基本的に私は私のデータベース内の項目の重複したエントリを削除していますので、基本的に私はこれらの少なくとも一つを維持したいですここで削除しなければならない重複のリストに他のものを投げる。

私はこの構造で行うことができますか、代わりにリストを使用する必要がありますか?

+0

を保持され、重複のどの重要ですか? –

+0

これはあなたのデータベースを処理させるべきもののようです。 – user2357112

+0

@ MarkRansomいいえ、それはありません。 –

答えて

0

これは、2つのネストされた辞書内包表記で実行できます。内部のものは、キーと値を逆にして複製を統合し、外側のものは元の形式で再構築します。

>>> {k:v for v,k in {v:k for k,v in potential_duplicates.items()}.items()} 
{433L: (u'one two three', u'one two three'), 435L: (u'whole foods', u'whole foods'), 439L: (u'this is a dupe', u'this is a dupe')} 

2枚のdictsを比較するために、リスト内包表記を使用し、削除されたキーのリストを取得するには:

>>> kept = {k:v for v,k in {v:k for k,v in potential_duplicates.items()}.items()} 
>>> removed = [k for k in potential_duplicates.keys() if k not in kept] 
>>> removed 
[432L, 434L, 437L, 438L] 
+0

いい..とても賢い。私はこのすべての真ん中に別のリストに "摘み取った"重複を保存する方法はありますか? –

+0

@bob_cobb更新を参照してください。 –

+0

男、ありがとうございます。これに私の頭脳を掛けている! –

関連する問題