2017-04-23 69 views
3

我對Python(第1天)完全陌生。我有一個數據集,通過布爾「poi」鍵指示某人是否感興趣。我能夠將數據與以下過濾器:如果鍵的值爲真,則過濾字典-python

filtered = [] 
for n in enron_data: 
    if enron_data[n]['poi']: filtered.append(enron_data[n]); 
print(len(filtered)) 

我嘗試了一段時間使用內置的過濾器蟒蛇,但無法。內置濾波器做到這一點的乾淨方式是什麼?

示例數據:{'METTS MARK': {... 'poi': False,}, ...}

回答

4

您可以使用列表解析來遍歷字典,然後創建評估Truevalue['poi']值的一個新的列表。

filtered = [v for k, v in enron_data.items() if v['poi']] 

事實上,你不使用按鍵可言,所以你可以只是做:

filtered = [v for v in enron_data.values() if v['poi']] 

或者使用過濾器(類似@AbidHasan):

filtered = filter(lambda x: x['poi'], enron_data.values()) 
+0

謝謝!有沒有什麼理由比使用帶'.filter'的lambda更適合?我來自JS世界,這是我的第一本能。 – devdropper87

+0

我發現列表理解比「過濾器」更容易閱讀,並且選擇讓更可讀的東西通常是更好的選擇。 –

1

您也可以使用filter功能。

new_list = filter(lambda x: a[x]['POI'], a)