2016-03-05 32 views
1

我試圖在各處找到解決方案,但找不到解決此問題的方法。假設我有多個詞典中的列表:挑選某套字典

[ 
    {"Type": "A", "Name": "Sam"}, 
    {"Type": "A", "Name": "Apple"}, 
    {"Type": "B", "Name": "Sam"}, 
    {"Type": "C", "Name": "Apple"}, 
    {"Type": "C"} 
] 

我需要的是具有'Type' == 'A'的字典。

我試圖得到的結果是:

[{"Type": "A", "Name": "Sam"}, {"Type": "A", "Name": "Apple"}] 

有什麼辦法,我可以做到這一點?任何幫助或解決這個問題的任何方向都會很棒。

回答

2

通過你的清單,並採取所有詞典與AType

>>> data = [{"Type": "A", "Name": "Sam"},{"Type":"A", "Name":"Apple"},{"Type": "B", "Name": "Sam"},{"Type":"C", "Name":"Apple"},{"Type":"C"}] 
>>> [d for d in data if d.get('Type') == 'A'] 
[{'Name': 'Sam', 'Type': 'A'}, {'Name': 'Apple', 'Type': 'A'}] 

使用dict.get()確保它適合類型的字典沒有密鑰Type

data = [{"Type": "A", "Name": "Sam"}, 
     {"Type":"A", "Name":"Apple"}, 
     {"Type": "B", "Name": "Sam"}, 
     {"Type":"C", "Name":"Apple"}, 
     {"Type":"C"}, 
     {}] 
>>> [d for d in data if d.get('Type') == 'A'] 
[{'Name': 'Sam', 'Type': 'A'}, {'Name': 'Apple', 'Type': 'A'}] 

因爲:

get(key[, default])

如果key在字典中,則返回key的值,否則返回default。如果未給出默認值,則默認爲None,以便此方法不會引發KeyError。

+0

非常感謝。這是我正在尋找的。你太棒了。 – Sam

+0

應該指出的是,如果字典沒有'Type'鍵,這將拋出一個KeyError。 –

+0

@JaredGoguen感謝您的提示。固定。 –

0
>>> a 
[{'Type': 'A', 'Name': 'Sam'}, {'Type': 'A', 'Name': 'Apple'}, {'Type': 'B', 'Name': 'Sam'}, {'Type': 'C', 'Name': 'Apple'}, {'Type': 'C'}] 
>>> b = [x for x in a if x['Type']=='A'] 
>>> b 
[{'Type': 'A', 'Name': 'Sam'}, {'Type': 'A', 'Name': 'Apple'}] 
+0

如果字典沒有「類型」鍵,這將拋出「KeyError」。 –

0
[d for d in d_list if d.get('Type') == 'A'] 
0

這幾乎是絕對不會做的最Python的方式,但如果你需要一個快速和骯髒的解決方案,我相信它的工作原理。

def filterDictionaries(dictionaries, type): 
     filteredDicts = [] 
     for dict in dictionaries: 
      if 'Type' in dict: 
      if dict['Type] == type: 
       filteredDicts += dict 
     return filteredDicts