检查dicts列表中键的唯一值

时间:2016-05-31 13:58:32

标签: python list dictionary

我有一个字典列表,我想删除任何重复其id键的字典。最好的方法是:

示例dict:

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

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

我如何才能获得产品清单,以便根据产品提供不重复的产品[' id']

2 个答案:

答案 0 :(得分:3)

选择其中一个产品词典,其中具有相同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}]

答案 1 :(得分:2)

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]