如何检查字典列表中是否存在逆元素而不循环遍历?

1 投票
2 回答
1014 浏览
提问于 2025-04-16 00:25

我的列表是这样的:

l1 = [ {k1:v1} , {k2:v2}, {v1:k1} ]

有没有更好的方法来检查列表中的字典是否有反向对?

2 个回答

3

我建议把字典转换成元组,然后把这些元组放进一个集合里。接着,你可以在集合中查看反向的元组是否存在。这样做的复杂度是O(n),比起O(n^2)要高效很多。

1

这段代码看起来在没有循环的情况下也能正常工作:

k1 = 'k1'
k2 = 'k2'
v1 = 'v1'
v2 = 'v2'
l1 = [ {k1:v1} , {k2:v2}, {v1:k1} ]

kv = [e.items()[0] for e in l1]
print(kv)

vk = [(v, k) for (k, v) in kv]
print(vk)

result = [(k, v) for (k, v) in kv if (k, v) in vk]
print(result)

撰写回答