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.
我认为你必须转换为一个冷冻的项目集:
>>> 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)
希望这对您的项目有所帮助:-)
感谢@niemmi提醒我,frozenset()在这里工作以及排序元组.