2016-05-31 3 views
1

私は辞書のリストを持っています。私はそのIDキーを繰り返す辞書を削除したいのですが。この例を行うための最善の方法は何です:辞書のリスト内のキーの一意の値を確認してください

例の辞書:

product_1={ 'id': 1234, 'price': 234} 

List_of_products[product1:, product2,...........] 

どのように製品のリスト私が非彼らの製品をベースにした製品を繰り返してきたので、[「ID」]

+0

「idキーを繰り返す辞書」私は分かりません。あなたは何をしようとしているのですか? –

+0

リストの代わりに、idをproduct_dictにマップするdictを使用することができます。 – syntonym

+2

@LutzHorn OPには、辞書のいくつかに多分現れるキー 'id'を持つ複数の辞書があり、それらの値は同じになります。彼または彼女はそれらのいくつかを取り除きたいと思うでしょう。 Akaは、リスト構造内の辞書から重複した 'id'値を切り取り、削除します。 – Torxed

答えて

1
a = [{'id': 124, 'price': 234}, {'id': 125, 'price': 234}, {'id': 1234, 'price': 234}, {'id': 1234, 'price': 234}] 
a.sort() 
for indx, val in enumerate(a): 
    if val['id'] == a[indx+1]['id']: 
     del a[indx] 
することができます
+0

完璧で素敵で簡単な感謝 – Yunti

+0

'IndexError:リストインデックスが範囲外です'、例えば 'a = [{'id':124、 'price':234}、{'id':125、 'price ':234}、{' id ':34、' price ':234}] ' – SparkAndShine

+0

@ sparkandshineいいえ列挙体がそれを処理するので、これは役に立たない。 –

2

同じidの値が異なるプロダクトディクショナリを1つ選択します。同じidと製品の辞書が全く同じであれば、Remove duplicate dict in list in Pythonで説明したように簡単な方法があるitertools.groupby

import itertools 

list_products= [{'id': 12, 'price': 234}, 
       {'id': 34, 'price': 456}, 
       {'id': 12, 'price': 456}, 
       {'id': 34, 'price': 78}] 


list_dicts = list() 
for name, group in itertools.groupby(sorted(list_products, key=lambda d : d['id']), key=lambda d : d['id']): 
    list_dicts.append(next(group)) 

print(list_dicts) 
# Output 
[{'price': 234, 'id': 12}, {'price': 456, 'id': 34}] 

を使用してください。ここにMWEがあります。

list_products= [{'id': 12, 'price': 234}, 
       {'id': 34, 'price': 456}, 
       {'id': 12, 'price': 234}, 
       {'id': 34, 'price': 456}]    

result = [dict(t) for t in set([tuple(d.items()) for d in list_products])] 

print(result) 
# Output 
[{'price': 456, 'id': 34}, {'price': 234, 'id': 12}] 
関連する問題