2017-02-15 125 views
0

如何根據滿足某些條件的字典在字典列表中獲取字典值?例如,如果在列表中的詞典中的一個具有ID = 5,我想打印對應於字典的name鍵的值:Python - 在if語句之後的字典列表中獲取字典元素

list = [{'name': 'Mike', 'id': 1}, {'name': 'Ellen', 'id': 5}] 
id = 5 
if any(m['id'] == id for m in list): 
    print m['name'] 

因爲m不被外部定義這將無法正常工作if語句。

回答

3

你有字典的列表,所以你可以使用列表理解:

[d for d in lst if d['id'] == 5] 

# [{'id': 5, 'name': 'Ellen'}] 
3
new_list = [m['name'] for m in list if m['id']==5] 
print '\n'.join(new_list) 
1

這將是很容易與單一for循環來完成:

for d in list: 
    if 'id' in d and d['in'] == 5: 
     print(d['name']) 

這裏有兩個關鍵的概念要學習。首先是我們使用for loop「遍歷列表中的每個元素」。第二,是我們用in這個詞來檢查一個字典是否有某個關鍵字。

+0

因爲這可以用一個相當基本的列表理解來處理,我猜是「Python化」的方式來解決他的問題,反對明確寫一個循環。 – Aaron

+0

@Aaron我懷疑只是打印出名字是目標。如果我們假設此時需要更復雜的邏輯,則列表理解可能無用。 (OP似乎不懂如何使用字典,所以我認爲這是解釋列表理解的糟糕時間。) – theJollySin

0

以下情況如何?

for entry in list: 
    if entry['id']==5: 
     print entry['name'] 
0

它不會在Python2存在,但在Python3一個簡單的解決辦法是使用ChainMap代替list

import collections 

d = collections.ChainMap(*[{'name':'Mike', 'id': 1}, {'name':'Ellen', 'id': 5}]) 
if 'id' in d: 
    print(d['id']) 
0

您可以使用過濾功能做到這一點:

lis = [ {'name': 'Mike', 'id': 1}, {'name':'Ellen', 'id': 5}] 
result = filter(lambda dic:dic['id']==5,lis)[0]['name'] 
print(result)