簡體   English   中英

如何遍歷整個字典鍵?

[英]How do I iterate over entire dictionary keys?

字典是包含鍵和值的字典。 我想對字典鍵進行迭代,在字典鍵中我將返回一個值小於或等於20的鍵數組。但是,我僅對一個鍵進行迭代。 如何遍歷整個字典鍵?

def total(diction):
    for key in diction:
        if diction[key] <= 20:
            return [key]

您的函數在碰到第一個return語句時完成執行。

您可以像這樣調整功能。

def total(diction):
    result = []
    for key, value in diction.items():
        if value <= 20:
            result.append(key)
    return result

此函數將滿足您條件的鍵附加到列表中,並且僅在查看了dict中的所有(鍵,值)對后才返回該列表。

另外,您可以編寫一個生成器函數:

def total_gen(diction):        
    for key, value in diction.items():
        if value <= 20:
            yield key

您可能會考慮給函數起一個比total更好的名稱,並讓它們采用一個附加參數(例如,名為limit ),以避免對值20硬編碼。

演示:

>>> d = {'a': 5, 'b': 100, 'c': 23, 'd': -2}
>>> total(d)
>>> ['d', 'a']
>>> list(total_gen(d))
>>> ['d', 'a']

當然,您也可以使用簡潔的列表或生成器表達式:

>>> [key for key, value in d.items() if value <= 20]
>>> ['d', 'a']
>>> 
>>> for k in (key for key, value in d.items() if value <= 20):
...:    print(k)
...:    
d
a

生成器函數和生成器表達式在不需要一次存儲所有鍵的情況下特別有用,例如,如果您只想遍歷它們。

您可以使用以下列表理解來迭代字典項:

def total(diction):
    return [key for key, value in diction.items() if value <= 20]
def total(diction):
    result = []
    for key in diction:
        if diction[key] <= 20:
            result.append(key)
    return result

或使用列表理解

def total(diction):
    return [key for key in diction if diction[key] <= 20]

您需要將密鑰保存到列表中,然后在瀏覽完所有密鑰后才返回。

def total(diction):
    key_list = []
    for key in diction:
        if diction[key] <= 20:
            key_list.append(key)
    return key_list

這也可以通過列表理解來完成:

def total(diction):
    return [k for k in diction if diction[k]<=20]

我不確定我是否正確理解了您的問題。 但是您可以使用字典的“ .keys()”屬性來獲取字典對象的鍵列表。 例如,如果您有一個名為“ diction”的字典對象,則使用diction.keys()會得到一個列表對象,其中鍵作為列表項。 然后,您可以像這樣遍歷每個鍵:

對於diction.keys()中的dict_key:diction [dict_key] = ......

希望能幫助到你

“迭代一個鍵”是什么意思? 的確,您每次編寫時都在遍歷所有鍵,一次一次-

for key in diction:

如果您想單行執行此操作,則可以使用lambda函數來縮短代碼-

list(filter(lambda x: dic[x]<=20, dic.keys()))

雖然,即使在這里您也一次檢查一次按鍵。 那是迭代!

暫無
暫無

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

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