Python|在字典中查找对称对
有时,在使用Python字典时,可能会遇到一个问题,即希望获得对称的键值对,即具有相同值的键值对,而不管事实值是键还是值。让我们讨论可以执行此任务的某些方式。
方法#1:使用生成器+循环
通过在运行时产生匹配的键值对的值,可以使用循环和生成器以蛮力方法解决此任务。
# Python3 code to demonstrate working of
# Find Symmetric Pairs in dictionary
# using generator + loop
# generator function to perform task
def find_sym_pairs(test_dict):
for key in test_dict.keys():
val = test_dict.get(key)
if test_dict.get(val) == key:
yield key, val
return
# Initializing dict
test_dict = {'a' : 1, 'b' : 2, 'c' : 3, 1 : 'a', 2 : 'b'}
# printing original dict
print("The original dict is : " + str(test_dict))
# Find Symmetric Pairs in dictionary
# using generator + loop
res = []
for key, val in find_sym_pairs(test_dict):
temp = (key, val)
res.append(temp)
# printing result
print("The pairs of Symmetric values : " + str(res))
输出 :
The original dict is : {'a': 1, 1: 'a', 'c': 3, 'b': 2, 2: 'b'}
The pairs of Symmetric values : [('a', 1), (1, 'a'), ('b', 2), (2, 'b')]
方法#2:使用列表推导
此任务也可以作为单行执行,使用列表理解作为执行基于循环的解决方案的缩短方式。
# Python3 code to demonstrate working of
# Find Symmetric Pairs in dictionary
# Using list comprehension
# Initializing dict
test_dict = {'a' : 1, 'b' : 2, 'c' : 3, 1 : 'a', 2 : 'b'}
# printing original dict
print("The original dict is : " + str(test_dict))
# Find Symmetric Pairs in dictionary
# Using list comprehension
temp = [(key, value) for key, value in test_dict.items()]
res = [(x, y) for (x, y) in temp if (y, x) in temp]
# printing result
print("The pairs of Symmetric values : " + str(res))
输出 :
The original dict is : {'a': 1, 1: 'a', 'c': 3, 'b': 2, 2: 'b'}
The pairs of Symmetric values : [('a', 1), (1, 'a'), ('b', 2), (2, 'b')]