Home > database >  trying to delete duplicate dictionary values from the list of dictionaries
trying to delete duplicate dictionary values from the list of dictionaries

Time:10-07

below is my list of dictionaries:

I'm tried to remove the duplicate values from 'r_id'. some values are in list and some are in string.

list_of_dict = [{'fid':200, 'r_id':['4321', '4321']}, {'fid':201, 'r_id':'5321'}]

expected output

list_of_dict = [{'fid':200, 'r_id':['4321']}, {'fid':201, 'r_id':['5321']}]

I've tried below piece of code but not worked

for item in list_of_dict:
    if type(item["record_id"]) == list:
        item["record_id"] = [set(item["record_id"])]

please suggest me with the solution

CodePudding user response:

Do:

result = [{ "fid" : d["fid"] , "r_id" : list(set(d["r_id"]))  } for d in list_of_dict]
print(result)

Or simply:

for d in list_of_dict:
    d["r_id"] = list(set(d["r_id"]))

print(list_of_dict)

If you really need to check the type, use isinstance:

for d in list_of_dict:
    if isinstance(d["r_id"], list):
        d["r_id"] = list(set(d["r_id"]))

For the canonical way of checking type in Python, read this.

CodePudding user response:

You are almost there ! Though there may be other (better) solutions, your solution will also work if you change it as below:

for item in list_of_dict:
    if type(item["r_id"]) == list:
        item["r_id"] = list(set(item["r_id"]))

CodePudding user response:

If in item['r_id'] you have another type like str you can try this:

list_of_dict = [{'fid':201, 'r_id':'5321'}, {'fid':200, 'r_id':['4321', '4321']}]

for item in list_of_dict:
    if type (item['r_id']) == list:
  # if isinstance(item['r_id'],list):
        item['r_id'] = list(set(item['r_id']))
    elif type (item['r_id']) == str:
  # elif isinstance(item['r_id'],str):
         item['r_id'] = [item['r_id']]

#Shortest approach
>>> [{'fid' : item['fid'], 'r_id' : list(set(item['r_id'])) if type(item['r_id']) == list else [item['r_id']]} for item in list_of_dict]

[{'fid': 201, 'r_id': ['5321']}, {'fid': 200, 'r_id': ['4321']}]

CodePudding user response:

try this:

for items in list_of_dict:
    temp_list = list()
    if isinstance(item["r_id"], list):
        for value in item["r_id"]:
            if value not in templist:
                temp_list.append(value)
        item["r_id"] = temp_list
  • Related