我正在尝试提取列表中所有词典的集合,以便dict1 is dict2 == False
为集合中的任意两个词典。不能使用set()
将字典列表缩减为一个集合,因为它们是不可散列的。我意识到我可以做到以下几点:
dictlist = [.....]
setlist = []
for d in dictlist:
if all(s is not d for s in setlist):
setlist.append(d)
是否有类似set()的python内置(使用c,速度更快)来减少列表,而不需要hashable?你知道吗
Tags:
如果要比较标识,则存储每个字典的^{} function 结果:
或者
这消除了基于对象标识的重复,而不是基于内容的相等性。第一种形式维持秩序,而第二种形式则不然(就像
set()
那样)。你知道吗对于相等性,键值对序列是可散列的(如果所有值都是可散列的);其中的^{} 将用作测试内容唯一性的键:
对于保序列表或:
如果秩序不重要。你知道吗
因为您关心的是标识而不是值,所以您需要一个标识集。没有内置的身份集(或身份dict),部分原因是很容易自己构建一个性能合理的身份集:
你想要的是
iddict.values()
。它不保持dictlist
的顺序,但是既然你要求一个set
的类似物,我想这是没有问题的。你知道吗相关问题 更多 >
编程相关推荐