2015-02-08 112 views
1

我想筛选特定字符串的Python字典的键。筛选列表中所有项目的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

注意,你*迭代*'filterInput',所以词典中,你只返回包括检查最后一个字符“1”,这个字符在所有的键中。你需要把'all'和迭代放在**字典理解的内部'filterInput' **上。另外,'dictionaryToFilter'应该可能是函数的第二个参数。 – jonrsharpe 2015-02-08 14:36:48

+0

谢谢大家的例子和解释。 – 2015-02-08 17:13:48

回答

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

要检查如果任1ca在每个键不能同时让您得到'bus 1'因为"1"显然是一个字符串。

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

我还将代码更改为使用小写和单独的单词,并使用下划线,这使得代码更具可读性并符合pep8样式指南。

0

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

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} 
相关问题