Мой список похож на
l1 = [ {k1:v1} , {k2:v2}, {v1:k1} ]
Есть ли лучший способ проверить, имеет ли какой-либо словарь в списке обратную пару?
Этот код работает без цикла:
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)
Я бы предложил преобразовать словари в кортеж и поместить кортеж в набор. И посмотрите в наборе, если обратный кортеж находится в наборе. Это будет иметь сложность O (n) вместо O (n ^ 2).
len(d) != len(set([frozenset(i) for i in d.items()]))
. Я думаю, это то, что предлагает Ксавье.