2015-02-08 165 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} 
相關問題