我正在尝试过滤特定字符串的python字典的键。
def filterDictionary(filterdata):
dictionaryToFilter = {'car 1':100,'car 2': 200, 'car 3':300, 'bus 1':1000, 'bus 2':2000, 'bus 3':3000}
filterInput =[]
filterInput = filterdata.split()
for a in filterInput:
dictonaryFiltered = {k:v for (k,v) in dictionaryToFilter.items() if a in k}
return dictonaryFiltered
我已经到了这样的程度,我的代码过滤了输入的任何字符串的键,用空格分隔,但我想让它们对所有字符串进行过滤。
例如filterDictionary(' ca 1')将返回{' car 1':100,' bus 1':1000} 我希望它只返回{' car 1':100}。
我想这是使用all()完成的,但我无法弄明白。
感谢。
答案 0 :(得分:1)
def filter_dictionary(filter_data):
dictionary_to_filter = {'car 1': 100, 'car 2': 200, 'car 3': 300, 'bus 1': 1000, 'bus 2': 2000, 'bus 3': 3000}
spl = filter_data.split()
dictionary_filtered = {k: v for (k, v) in dictionary_to_filter.items() if all(a in k for a in spl)}
return dictionary_filtered
print(filter_dictionary('ca 1') )
{'car 1': 100}
您需要检查all
子串是否在dict键中。
您正在检查每个密钥中是否都有1
或 ca
,而不是两者都是'bus 1'
因为"1"
显然是子字符串
if all(a in k for a in spl)
检查我们的split输入字符串中的每个子字符串是否等于键字符串的子字符串。
我还将代码更改为使用小写和使用下划线分隔单词,这使您的代码更具可读性并符合pep8样式指南。
答案 1 :(得分:0)
您可以检查字符串是否包含a中的每个字符 substring with
all(character in somestring for character in substring)
所以,
def filterDictionary(filterdata):
dictionaryToFilter = {'car 1': 100, 'car 2': 200, 'car 3': 300,
'bus 1': 1000, 'bus 2': 2000, 'bus 3': 3000}
return {k: v for (k, v) in dictionaryToFilter.items()
if all(character in k for character in filterdata)}
print(filterDictionary("cr1"))
{'car 1': 100}