过滤python字典的键以获取列表的所有项目

时间:2015-02-08 14:24:37

标签: python dictionary filter key

我正在尝试过滤特定字符串的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()完成的,但我无法弄明白。

感谢。

2 个答案:

答案 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}