簡體   English   中英

使用列表理解的if語句進行字典理解

[英]Dictionary comprehension with if statements using list comprehension

我正在嘗試根據另一個字典中的值來過濾大型字典。 我想存儲要在列表中進行過濾的鍵。 到目前為止,我有:

feature_list = ['a', 'b', 'c']
match_dict = {'a': 1,
              'b': 2,
              'c': 3}

all_dict = {'id1': {'a': 1,
                    'b': 2,
                    'c': 3},
            'id2': {'a': 1,
                    'b': 4,
                    'c': 3},
            'id3': {'a': 2,
                    'b': 5,
                    'c': 3}}

filtered_dict = {k: v for k, v in all_dict.items() for feature in feature_list if
                 v[feature] == match_dict[feature]}

這將返回所有id,因為當我希望if語句被評估為AND語句時,我認為if語句被評估為OR語句。 所以我只想要id1字典。 我想回來:

filtered_dict = {'id1': {'a': 1,
                         'b': 2,
                         'c': 3}}

您是對的:您的測試始終會通過,因為一個條件成立。 您需要滿足所有條件。

您可以使用all來獲得適當的行為:

{k: v for k, v in all_dict.items() if all(v[feature] == match_dict[feature] for feature in feature_list)}

請注意,如果match_list鍵與feature_list相同,則更為簡單,只需比較字典即可:

r = {k: v for k, v in all_dict.items() if v == match_dict}

(或使用您首先需要的功能來計算過濾后的match_dict 。性能會更好)

暫無
暫無

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

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