如何形成一组词典

aaj*_*aaj 0 python dictionary set data-structures

我的意图是拥有一个包含独特词典的列表.为此,我已经发现使用套装将是一个不错的选择,这就是我一直在尝试的.

这是我一直在做的事情:

import json
mylist = [{'id':1,'name':'john', 'age':34},{'id':1,'name':'john', 'age':34},{'id':2,'name':'hanna', 'age':30}]
print(mylist[0])
myset = set(json.dumps(mylist[0]))
print(myset)
Run Code Online (Sandbox Code Playgroud)

这是输出

{'id': 1, 'age': 34, 'name': 'john'} #actual dictionary element
{'e', 'j', 'h', 'i', ':', '"', 'o', '3', 'n', 'a', '}', '4', ' ', ',', 'm', 'g', '{', '1', 'd'} #dictionary element in set
Run Code Online (Sandbox Code Playgroud)

由于我们无法将字典对象存储在集合中,因此我首先使用json.dumps将元素转换为字符串.基本上设置是单一化我的字典元素.如何将字典元素存储在集合中.我知道我们不能将dict对象存储在一个集合中,因此我将它们转换为字符串1st然后添加set.

Ray*_*ger 5

我认为你必须转换为一个冷冻的项目集:

>>> list(map(dict, set(frozenset(d.items()) for d in mylist)))
[{'age': 30, 'id': 2, 'name': 'hanna'}, {'age': 34, 'id': 1, 'name': 'john'}]
Run Code Online (Sandbox Code Playgroud)

或使用已排序的元组:

>>> [dict(t) for t in set([tuple(sorted(d.items())) for d in mylist])]
[{'age': 30, 'id': 2, 'name': 'hanna'}, {'age': 34, 'id': 1, 'name': 'john'}]
Run Code Online (Sandbox Code Playgroud)
  • dict.items()为您提供键/值对的列表.
  • 我们转换为可以清除的冻结集并使用无序比较.
  • 或者,我们将列表转换为元组,因为它是可清除的并对输入进行排序,因为在dict项无序时排序了元组比较.
  • set()消除了重复的条目.
  • dict()将元组的元组转换回字典.

希望这对您的项目有所帮助:-)

感谢@niemmi提醒我,frozenset()在这里工作以及排序元组.