[英]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):
...
即使我們忽略丑陋的重復,所有文字實際上都有相當長的長度,因此重復k
和v
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.