假设我有一个这样的词典列表:
[
{'101': ['A','B'],
'102': ['C'],
'103': ['D'],
'104': [],
'105': [],
'deck': ['E', 'F', 'G', 'H', 'I', 'J', 'K', 'L']},
{'101': ['A'],
'102': ['C'],
'103': ['B'],
'104': ['D'],
'105': ['E'],
'deck': ['E', 'F', 'G', 'H', 'I', 'J', 'K', 'L']},
{'101': ['A','B'],
'102': ['C'],
'103': ['D'],
'104': [],
'105': [],
'deck': ['E','F', 'G', 'H', 'I', 'J', 'K', 'L']}
]
并且我需要获得唯一字典的列表(删除重复项):
[
{'101': ['A','B'],
'102': ['C'],
'103': ['D'],
'104': [],
'105': [],
'deck': ['E', 'F', 'G', 'H', 'I', 'J', 'K', 'L']},
{'101': ['A'],
'102': ['C'],
'103': ['B'],
'104': ['D'],
'105': ['E'],
'deck': ['E', 'F', 'G', 'H', 'I', 'J', 'K', 'L']}
]
我尝试了
unique_solutions = list(set(val for dic in full_solutions_list for val in dic.values()))
但是字典值的“列表”类型不可散列。
什么是有效的方法? (词典的数量相对较大)。
答案 0 :(得分:1)
如果dict
中没有包含list
,则可以将其添加到其中(请注意,我假设您要使第三项包含'E'
在其deck
列表中,否则将不会重复):
x = [
{'101': ['A','B'],
'102': ['C'],
'103': ['D'],
'104': [],
'105': [],
'deck': ['E', 'F', 'G', 'H', 'I', 'J', 'K', 'L']},
{'101': ['A'],
'102': ['C'],
'103': ['B'],
'104': ['D'],
'105': ['E'],
'deck': ['E', 'F', 'G', 'H', 'I', 'J', 'K', 'L']},
{'101': ['A','B'],
'102': ['C'],
'103': ['D'],
'104': [],
'105': [],
'deck': ['E', 'F', 'G', 'H', 'I', 'J', 'K', 'L']}
]
unique_solutions = []
for d in x:
if d not in unique_solutions:
unique_solutions.append(d)
或者,您可以创建类似HashDict
的类来实现哈希(在我的示例中,使用元组,但这可以通过不同的方式完成),然后创建set
:
class HashDict(dict):
def __init__(self, d):
for k, v in d.items():
self[k] = v
def __hash__(self):
return hash(tuple((k, tuple(v)) for k, v in self.items()))
hdx = [HashDict(d) for d in x]
unique_solutions = list(set(hdx))
两个示例都导致
>>> print(unique_solutions)
[{'101': ['A', 'B'], '102': ['C'], '103': ['D'], '104': [], '105': [], 'deck': ['E', 'F', 'G', 'H', 'I', 'J', 'K', 'L']}, {'101': ['A'], '102': ['C'], '103': ['B'], '104': ['D'], '105': ['E'], 'deck': ['E', 'F', 'G', 'H', 'I', 'J', 'K', 'L']}]
答案 1 :(得分:1)
您正在尝试遍历字典值,这会导致您出错。如果该值尚不存在,可以将dict
附加到列表中。
unique_solutions=[]
[unique_solutions.append(val) for val in lst if val not in unique_solutions]
结果:
>>> print(unique_solutions)
[{'101': ['A', 'B'], '102': ['C'], '103': ['D'], '104': [], '105': [], 'deck': ['E', 'F', 'G', 'H', 'I', 'J', 'K', 'L']}, {'101': ['A'], '102': ['C'], '103': ['B'], '104': ['D'], '105': ['E'], 'deck': ['E', 'F', 'G', 'H', 'I', 'J', 'K', 'L']}]