簡體   English   中英

Python - 枚舉過濾字典的非笨拙方式

[英]Python - non-clumsy way to enumerate over filtered dictionary

我有這樣的代碼( d是一些字典, s是一些集合):

for i, (k, v) in enumerate((k, v) for k, v in d.items() if k in s):
    ...

即使我們忽略丑陋的重復,所有文字實際上都有相當長的長度,因此重復kv 3 次不是一種選擇。 最好的寫法是什么? 現在,我們使用以下(也是丑陋的)選項:

i = -1
for k, v in d.items():
    if k not in s:
        continue
    i += 1
    ...

另外的選擇:

for i, (k, v) in enumerate((k, d[k]) for k in d if k in s):
    ...

,但它基本上具有相同的重復次數。

我可以使用默認提供的任何庫(即沒有pip install )。

使用額外的一行,但復雜性要低得多,您可以執行以下操作:

for i, k in enumerate(filter(s.__contains__, d)):
    v = d[k]

這種方法的一種變體是使用集合交集(雖然這可能會擾亂您的插入順序):

for i, k in enumerate(s & d.keys()):
    v = d[k]

dict理解是過濾dict的最快方法:

filtered_dict = {key: value for key, value in d.items() if key in s}

因此,我建議定義一個任務 function 來完成項目的工作並在這個字典理解中做所有事情:

def task(key, value):
    # do the required job on the dict items
    ....
    return result


{key: task(key, value) for key, value in d.items() if key in s}

結果是一個字典,其中包含每個鍵/值項的計算結果。 當然,如果額外需要索引,您可以添加enumerate

暫無
暫無

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

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