2016-03-05 44 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