簡體   English   中英

遍歷字典鍵的子集

[英]iterate over a subset of dictionary keys

我正在尋找學習如何將字典中的某些鍵/值傳遞給for循環內的另一個函數。 “某些”鍵都共享相同的初始字符串,並以尾隨整數遞增,如下所示:

data = {}
data["HMD1"] = [a,b,c]
data["HMD2"] = [d,f,g] #and so on...

同一字典中還有其他名稱不同的鍵。 現在在一個for循環中,我想將每個以“ HMD”開頭的鍵的值傳遞給另一個函數。 這是失敗嘗試的最小工作示例:

data = {}
data["HMD1"] = [0,2,3]
data["HMD2"] = [5,6,4]
data["not"] = 1237659398
data["HMD3"] = [1,1,1]

def dummyfun(vargin):
    print(vargin)
    return vargin

for f in range(1,2,1):
    out = dummyfun(data[eval(''.join(("HMD",str(f))))])

這是一個很糟糕的猜測,因為eval()嘗試評估“ HMD1”,它不是變量而是數據中的鍵,因此它當然會返回錯誤。 有人知道如何正確執行此操作嗎?

只需使用for循環遍歷字典,然后使用if語句檢查鍵的有效性:

for key in yourDict: #a for loop for dict iterates through its keys
    if 'HMD' in key: #or you can replace with any other conditional
        #DO WHAT YOU WANT TO DO HERE

這是一個快速的工作示例:

>>> data = {'HMD1': [1,2,3], 'HMD23':'heyo mayo', 'HMNOT2':'if this prints, I did something wrong'}
>>> for key in data:
...     if 'HMD' in key:
...             print data[key]
...
[1, 2, 3]
heyo mayo

在進一步了解您想要的內容之后,您也可以向后看,創建鍵字符串並打印這些鍵指向的值:

#let's say you want to print HMD1, HMD2, HMD4, but not anything else
keylist = [#list of keys that you want]
for key in keylist:
    if key in data:
        print data[key]

還有一個可行的例子。

>>> data = {'HMD1': [1,2,3], 'HMD3':'heyo mayo, this shouldnt print', 'HMD4':123, 'HMD2':['g', 'h', 'i'], 'HMNOT2':'if this prints, I did something wrong'}
>>> keylist = ['HMD1', 'HMD2', 'HMD4']
>>> for key in keylist:
...     if key in data:
...             print data[key]
...
[1, 2, 3]
['g', 'h', 'i']
123

您根本不需要eval 例如,您只需要使用.format構建字符串

for f in range(1,4): #range don't include the end point
    out = dummyfun(data["HMD{}".format(f)])

有了這個,你就會得到欲望的結果。 但是,如果密鑰不在dict中,那將失敗,您可以先檢查它,捕獲異常,或者在不存在所需密鑰的情況下提供默認值

#check first
for f in range(1,4): 
    key = "HMD{}".format(f)
    if key in data:
        out = dummyfun(data[key])

#catch the exception 
for f in range(1,4): 
    try: 
        out = dummyfun(data["HMD{}".format(f)])
    except KeyError:
        print("key",f,"is not in the data")

#provide a default value
for f in range(1,4): 
    out = dummyfun(data.get("HMD{}".format(f),None))

暫無
暫無

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

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