Python删除具有相同值的字典项

时间:2019-05-27 18:59:47

标签: python-3.x

如何删除具有不同键但值相同的字典项?我确定有比我的新手算法更好的方法...?

示例:(出现错误“ 字典在迭代过程中更改了大小”)

此示例的目标是从字典中删除“ car_id”或“ truck_id”。

key_fields_obj = {}
key_fields_obj['car_id'] = 'bob'
key_fields_obj['bike_id'] = 'sam'
key_fields_obj['truck_id'] = 'bob' #goal: remove this one, so left with only car_id and bike_id

for item in key_fields_obj:
    tst = key_fields_obj[item]
    for comp in key_fields_obj:
        if item == comp:
            continue
        cmp = key_fields_obj[comp]
        if cmp == tst:
            del key_fields_obj[comp]

print(key_fields_obj)

2 个答案:

答案 0 :(得分:3)

使用键作为值和键作为值创建一个新的字典,然后对新字典再次执行相同的操作。

>>> key_fields_obj = {key_fields_obj[key]: key for key in key_fields_obj}
>>> key_fields_obj
{'bob': 'truck_id', 'sam': 'bike_id'}
>>>
>>> key_fields_obj = {key_fields_obj[key]: key for key in key_fields_obj}
>>> key_fields_obj
{'truck_id': 'bob', 'bike_id': 'sam'}

答案 1 :(得分:2)

seem_values = set()

for key, value in list(key_fields_obj.items()):
   if value in seem_values:
       del key_fields_obj[key]
   else:
       seem_values.add(value)