簡體   English   中英

通過Python3中的鍵列表過濾詞典列表

[英]Filter a list of dictionaries by a list of keys in Python3

如何過濾Python3中的詞典列表?

results = [{'name':'jason','email':'test1@example.com'},
           {'name':'mike','email':'test2@example.com'},
           {'name':'eric','email':'test3@example.com'}]

allowed_keys = ['name']

我以為我可以做這樣的事情:

results2 = dict((k, v) for k,v, in results.items() if k in allowed_keys)

但是我得到這個錯誤:

>> AttributeError: 'list' object has no attribute 'items'

這是線程安全的嗎?

根據您的澄清評論,“我想返回僅包含鍵“名稱”的詞典列表:

>>> [{k: d[k] for k in allowed_keys} for d in results]
[{'name': 'jason'}, {'name': 'mike'}, {'name': 'eric'}]

注意:此解決方案假定, allowed_keys中的所有鍵都保證在結果的每個字典中。 如果不是,請執行此操作(但請注意,最終可能會得到一些空字典):

[{k: d[k] for k in allowed_keys if k in d} for d in results]

一個班輪有點雜亂,但是就在這里。 簡而言之,您忘了添加一個外循環來遍歷所有字典。

new_results = [dict((k, v) for k, v in d.items() if k in allowed_keys) for d in results]

也許是一種更具可讀性的解決方案:

new_results = []
for d in results:
    new_d = {}
    for k, v in d.items():
        if k in allowed_keys:
            new_d[k] = v
    new_results.append(new_d)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM