簡體   English   中英

如何在字典中的值上過濾此python defaultdict?

[英]How do I filter this python defaultdict on a value within a dict?

我有一個defaultdict,python 3.4,對象類似於:

mydefaultdict = defaultdict(dict)
mydefaultdict['name1']['filename'] = 'name1'
mydefaultdict['name1']['records_available'] = True
mydefaultdict['name2']['filename'] = 'name2'
mydefaultdict['name2']['records_available'] = False

我只想創建一個具有records_available = True的過濾子集。 到目前為止,我對dict的理解是:

defaultdict(dict, {k: v['records_available'] for k, v 
               in mydefaultdict.items() })

真的很近 但是我不確定如何實現過濾器。 如果這是基本命令,則可以執行以下操作。

defaultdict(dict, {k: v['records_available'] for k, v 
               in mydefaultdict.items() if v == True })

我設法使用嵌套的for, if循環來實現這一點。 但是我對dict的理解是如此接近,我想知道是否有人可以解決。 對我來說,解析python集合是一項日常活動。

我當前的解決方案:

for i in audio_files.values():
    if i['records_available']:
        filterd_files[i['filename']] = i

編輯:user3100115是正確的。 模擬問題數據將不會返回一條帶有user31000115響應的記錄。

您想獲得v['records_available']作為值似乎很奇怪(因為所有該值均為true)。 但是您可能要注意的是,這些值沒有元素'records_available'或根本不是字典。 前者可以通過使用.get方法來解決,但是如果您想保護您免受后者的侵害,則必須定義自己的getitem (類似於getattr ),當對象完全不支持預訂時,它將返回default或不包含要求的項目:

def getitem(obj, key, default=None):
    try:
        return obj[key]
    except (AttributeError, KeyError):
        return default

然后,您可以將其用作過濾器(我使用func(v)將值轉換為所需的值,因為我認為去"records_available"項是沒有意義的-它只會是True ):

{k, func(v) for k, v in mydefaultdict.items() if getitem(v, "records_available") == True)}

請注意,只要v不包含"records_available"或根本不支持預訂, getitem都將返回None ,因此該鍵值對將不會進入字典。

暫無
暫無

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

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