2016-05-31 80 views
1

我有一个字典的列表,我想删除任何重复他们的密钥的字典。什么是做到这一点如最好的办法:检查一个密钥列表中的一个键的唯一值

例如字典:

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

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

哪有我的产品清单,所以我必须根据自己的产品[“身份证”]

+0

”重复他们的密钥的字典“我不明白。你想做什么? – 2016-05-31 13:59:23

+0

您可以使用将id映射到product_dict的字典,而不是列表。 – syntonym

+2

@LutzHorn OP有多个字典,其中有一个键'id',可能出现在几个字典中,它们的值恰好相同。他或她会想要清除那些如何。又名循环并从列表结构中的字典中删除重复的“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相同的值不同的产品词典之一。使用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}] 

如果具有相同id产品的字典是完全一样的,有在Remove duplicate dict in list in Python描述一个简单的方法。这是一个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}] 
相关问题