簡體   English   中英

Python:根據多個鍵值過濾字典列表

[英]Python: filter list of dictionaries based on multiple key values

我正在使用類似 JSON 的字典導入日志文件並嘗試:1)僅包含包含所有三個鍵的日志 2)創建僅包含這些鍵/值的新字典列表

日志:

{"pytest_version": "7.1.e", "$report_type": "SessionStart"}
{"label": "test1", "outcome": "passed", "duration":0.0009}
{"label": "test2", "outcome": "passed", "duration":0.00019}

腳本:

with open('log', 'r') as f:
    key_list = ['label', 'outcome']
    l = [json.loads(log) for log in logs]
    l2 = [{k:v for k, v in d.items() if k in key_list} for d in l]
    print(l2)

Output

 [{},
 {'label': 'test1', 'outcome': 'passed'},
 {'label': 'test2', 'outcome': 'passed'}]

為什么結果中有一個空字典? 如果鍵有值(例如排除'outcome':'' ),如何修改它以僅包含結果

第一個空字典{}在那里,因為{"pytest_version": "7.1.e", "$report_type": "SessionStart"}不包含鍵'label''outcome'

一種解決方案可能是使用all()僅保留包含key_list所有鍵的字典:

logs = [
    {"pytest_version": "7.1.e", "$report_type": "SessionStart"},
    {"label": "test1", "outcome": "passed", "duration": 0.0009},
    {"label": "test2", "outcome": "passed", "duration": 0.00019},
]

key_list = ["label", "outcome"]

print(
    [{k: d[k] for k in key_list} for d in logs if all(k in d for k in key_list)]
)

印刷:

[{'label': 'test1', 'outcome': 'passed'}, {'label': 'test2', 'outcome': 'passed'}]

暫無
暫無

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

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