为列表的所有项目过滤 python 字典的键

filtering the keys of a python dictionary for all the items of a list

我正在尝试为特定字符串过滤 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

我已经到了我的代码过滤任何输入字符串的键的地步,由 space 分隔,但我想让它过滤所有的字符串。

例如 filterDictionary('ca 1') 将 return {'car 1': 100, 'bus 1': 1000} 我希望它只 return {'car 1': 100}。

我猜是用all()完成的,但我想不通。

谢谢。

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 子字符串是否在字典键中。

您正在检查每个键中是否有 1 ca 而不是两者都有所以您得到 'bus 1' 因为 "1" 显然是一个子串。

if all(a in k for a in spl) 检查我们拆分的输入字符串中的每个子字符串是否等于或密钥字符串的子字符串。

我还更改了您的代码以使用小写字母并使用下划线分隔单词,这使您的代码更具可读性并且符合 pep8 风格指南。

您可以检查一个字符串是否包含 带有

的子串
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}