尝试从字典列表中删除重复的字典值。

3
以下是我的字典列表:
我试图从'r_id'中删除重复值。一些值是在列表中,一些值是在字符串中。
list_of_dict = [{'fid':200, 'r_id':['4321', '4321']}, {'fid':201, 'r_id':'5321'}]

预期输出

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

我尝试了下面的这段代码但没有成功

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

请为我提供解决方案。

4个回答

2

做:

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

或者简单地说:
for d in list_of_dict:
    d["r_id"] = list(set(d["r_id"]))

print(list_of_dict)

如果你真的需要检查类型,使用isinstance
for d in list_of_dict:
    if isinstance(d["r_id"], list):
        d["r_id"] = list(set(d["r_id"]))

在 Python 中检查类型的规范方式,请阅读 this

1
你已经接近成功了!虽然可能会有其他(更好的)解决方案,但如果按照以下方式进行更改,你的解决方案也将可行:
for item in list_of_dict:
    if type(item["r_id"]) == list:
        item["r_id"] = list(set(item["r_id"]))

1
如果在item['r_id']中有其他类型,比如str,你可以尝试这样做:
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']}]

0

试试这个:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接