我有一个字典,假设n行,在每一行中,我有一串值和元组作为键。就像这样:
a = {(-1,2):40, (4,5):10, (-6,1):20, (2,-3):30, ...}
现在假设我有另外一本这样的字典:
b = {(4,5):10, (-6,1):20, (-1,2):40, (2,-3):30, ...}
因此,基本上b
是a
,但元素的顺序并不相同。问题是我想不出一个很好的方法来检查这个问题。我不能使用sets作为键,并且可以快速确认a == b
,如果我将元组作为键,那么a == b is false
,因为顺序是置乱的。我试过tuple(set())
,但也不起作用。所以我想把这些键保持为tuple(set())
,在中间的一步中“解元组”,检查它们,并将它们重新组合起来。我不想混淆元组内部的(4,5,-6,1,.),我最终想做的是看看我的字典中是否已经有这种元组组合,不管元素是如何排序的。
让我知道,如果我不能说清楚,我是一个菜鸟在编程所以是,谢谢。
发布于 2020-04-02 07:25:04
你做了别的错事,在字典里秩序是无关紧要的.
In [1]: x = {(1,2):3, (4,5):6}
In [2]: y = {(4,5):6, (1,2):3}
In [3]: x == y
Out[4]: True
发布于 2020-04-02 12:11:16
您可以对两个字典中的元组进行规范化,以执行比较:
def normalized(d): return { tuple(sorted(k)):v for k,v in d.items() }
if normalized(a) == normalized(b):
...
请注意,这并不是非常有效,您应该考虑在程序的其余部分使用规范化密钥(即在读取/接收数据时尽早将其规范化)。
https://stackoverflow.com/questions/60995035
复制相似问题