Python – 过滤索引相似值
有时,在使用Python字典时,我们可能会遇到一个问题,即我们需要从列表中与字典中的某个键匹配的值中提取与过滤索引匹配的值列表中的所有值。这种应用程序可以发生在 Web 开发中。
Input : test_dict = {“Gfg” : [4, 5, 7], “is” : [5, 6, 8], “best” : [10, 7, 4]}
Output : {“Gfg” : [4, 5, 7], “is” : [5, 6, 8], “best” : [10, 7, 4]}
Input : test_dict = {“Gfg” : [4, 20, 5, 7], “is” : [5, 17, 6, 8], “best” : [10, 11, 7, 4]}
Output : {‘Gfg’: [4, 5, 7], ‘is’: [5, 6, 8], ‘best’: [10, 7, 4]}
方法 #1:使用循环 + zip() + defaultdict()
上述方法的组合可以用来解决这个问题。在此,我们使用 list 初始化 defaultdict,使用 zip() 绑定所有键并使用循环附加所需的元素。
# Python3 code to demonstrate working of
# Filter index similar values
# Using loop + zip() + defaultdict()
from collections import defaultdict
# initializing dictionary
test_dict = {"Gfg" : [1, 4, 5, 6, 7], "is" : [5, 6, 8, 9, 10],
"best" : [10, 7, 4, 11, 23]}
# printing original dictionary
print("The original dictionary : " + str(test_dict))
# initializing value list
filt_list = [4, 5, 7]
# Filter index similar values
# Using loop + zip() + defaultdict()
res = defaultdict(list)
for x, y, z in zip(test_dict['Gfg'], test_dict['is'], test_dict['best']):
if x in filt_list:
res['Gfg'].append(x)
res['is'].append(y)
res['best'].append(z)
# printing result
print("The filtered dictionary : " + str(dict(res)))
The original dictionary : {‘Gfg’: [1, 4, 5, 6, 7], ‘is’: [5, 6, 8, 9, 10], ‘best’: [10, 7, 4, 11, 23]}
The filtered dictionary : {‘Gfg’: [4, 5, 7], ‘is’: [6, 8, 10], ‘best’: [7, 4, 23]}
方法#2:使用列表理解+字典理解
上述功能的组合可以用来解决这个问题。在此,我们使用列表推导提取索引,并使用字典推导从其他键中过滤。
# Python3 code to demonstrate working of
# Filter index similar values
# Using list comprehension + dictionary comprehension
# initializing dictionary
test_dict = {"Gfg" : [1, 4, 5, 6, 7], "is" : [5, 6, 8, 9, 10],
"best" : [10, 7, 4, 11, 23]}
# printing original dictionary
print("The original dictionary : " + str(test_dict))
# initializing value list
filt_list = [4, 5, 7]
# Filter index similar values
# Using list comprehension + dictionary comprehension
temp = [test_dict['Gfg'].index(idx) for idx in filt_list]
res = {key : [test_dict[key][idx] for idx in temp] for key in test_dict.keys()}
# printing result
print("The filtered dictionary : " + str(res))
The original dictionary : {‘Gfg’: [1, 4, 5, 6, 7], ‘is’: [5, 6, 8, 9, 10], ‘best’: [10, 7, 4, 11, 23]}
The filtered dictionary : {‘Gfg’: [4, 5, 7], ‘is’: [6, 8, 10], ‘best’: [7, 4, 23]}