最近在写工具,拿到数据,发现有重复的,想到用set去重,结果报错了,哈哈,重新学习下
# 例子: data_list = [{'id':1,'name':'user01'},{'id':2,'name':'user02'},{'id':1,'name':'user01'}] data = set(data_list) # 报错: Traceback (most recent call last): File "test.py", line 2, in <module> data = set(data_dict) TypeError: unhashable type: 'dict' """错误提示说 不可哈希类型。 可哈希:int \ float \ str \ tuple 不可哈希: list \ set \ dict """
解决方法:
# 源数据 data_list = [{'id':1,'name':'user01'},{'id':2,'name':'user02'},{'id':1,'name':'user01'}] # 第一种方法 def get_data(data_list): """ 列表套字典去重 :return: """ seen = set() new_l = [] for i in data_list: # 把字典数据转为元组,元组是可哈希类型 t = tuple(i.items()) if t not in seen: seen.add(t) new_l.append(i) print(new_l) get_data(data_list) # 结果如下: [{'id': 1, 'name': 'user01'}, {'id': 2, 'name': 'user02'}] # 第二种方法: new_data_list = [dict(d) for d in (set(tuple(i.items()) for i in data_list))] print(new_data_list) # 第一个先循环data_list数据,把i.items()转为元组,set是把数据去重。 # 第二个循环是把数据转成字典 # 结果如下: [{'id': 1, 'name': 'user01'}, {'id': 2, 'name': 'user02'}]
标签:set,name,python,list,列表,data,id,user01,字典 From: https://www.cnblogs.com/lucktomato/p/16837701.html