2016-01-22 132 views
0

我正在處理1.字典列表和2.列表。我想:
1.迭代通過列表(列表1),
2.匹配在List1與API響應ID值,如果發現 - 把整個字典在new_dict 3.否則跳過迭代列表並將其值與字典進行比較

API響應JSON格式:

list_of_dict=[{"id":1500, 
     "f_name": "alex", 
     "age": 25 
     }, 

     {"id" :1501, 
     "f_name":"Bob", 
     "age": 30 
     }, 
     {"id" :1600, 
     "f_name":"Charlie", 
     "age": 35 
     } 
     ... 
    ] 

而一個list1的:

list1=[1500,1501,1211.....] 

據此,1500 & 1501存在於升ist_of_dict,這樣整個字典將被添加到new_dict中。

我嘗試:

new_dict=dict() 
for i,val in enumerate(list1): 
    #assuming val found in dict 
    #so put it in new dict 
    print i ,"=",val 
    new_dict.update({"id": val,"name":name, "age":age}) 

什麼,我看到的是這個代碼以列表的唯一的最後一個項目,並更新字典..但在我而言,new_dict將包含兩個詞典與ID 15001501。我錯過了什麼?

+0

可以說'list1 = [1500,1501]'(因爲這些都在'list_of_dict'的例子中) - 你想在處理之後使用'new_dict'嗎? – mgilson

+0

我認爲OP希望輸出成爲一個列表。該更新運算符將覆蓋 – inspectorG4dget

回答

0
list_of_dict = [{"id":1500, 
        "f_name": "alex", 
        "age": 25 
        }, 

        {"id" :1501, 
         "f_name":"Bob", 
         "age": 30 
        }, 
        {"id" :1600, 
         "f_name":"Charlie", 
         "age": 35 
        } 
        ] 

list1=[1500,1501,1211] 

ret = filter(lambda x: x['id'] in list1, list_of_dict) 
print ret 

退房內置到Python的有用而簡單的過濾功能。它通過一個可迭代(列表)進行迭代,並且只返回了所提供的功能

返回true,在這種情況下的項目,我們的過濾函數是:

lambda x: x['id'] in list1 
0
list_of_dict = [{"id":1500, 
        "f_name": "alex", 
        "age": 25 
        }, 

        {"id" :1501, 
         "f_name":"Bob", 
         "age" 30 
        }, 
        {"id" :1600, 
         "f_name":"Charlie", 
         "age" 35 
        } 
        ... 
        ] 

dicts = {d['id']:d for d in list_of_dict} 
list1=[1500,1501,1211.....] 

answer = [dicts[k] for k in list1 if k in dicts] 
0

你可以用一個簡單的列表理解這樣做,通過他們的ID是否是列表過濾類型的字典:

result = [d for d in list_of_dict if d["id"] in list1] 

如果您list1較大,您可能希望把它變成一個set第一,所以查找更快:

list1_as_set = set(list1) 
result = [d for d in list_of_dict if d["id"] in list1_as_set] 
相關問題