如何遍历整个字典键?

时间:2018-11-05 21:09:53

标签: python dictionary

Diction是包含键和值的字典。我想对字典键进行迭代,在字典键中我将返回一个值小于或等于20的键数组。但是,我仅对一个键进行迭代。如何遍历整个字典键?

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

6 个答案:

答案 0 :(得分:2)

您的函数在遇到第一个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

在不需要一次在内存中使用所有键的情况下(例如,如果您只想遍历它们),生成器函数和生成器表达式特别有用。

答案 1 :(得分:1)

您可以使用以下列表理解来遍历字典项:

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

答案 2 :(得分:1)

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]

答案 3 :(得分:1)

您需要将密钥保存到列表中,然后在浏览完所有密钥后才返回。

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]

答案 4 :(得分:0)

我不确定我是否正确理解了您的问题。但是您可以使用字典的“ .keys()”属性来获取字典对象的键列表。例如。如果您有一个名为“ diction”的字典对象,则使用diction.keys()会得到一个列表对象,其中键作为列表项。然后,您可以像这样遍历每个键:

对于diction.keys()中的dict_key:     diction [dict_key] = ......

希望,它会帮助

答案 5 :(得分:0)

“重复一键”是什么意思?的确,您每次编写时都在遍历所有键-

for key in diction:

如果要单行执行此操作,则可以使用lambda函数来缩短代码-

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

尽管如此,即使在这里,您一次也只能检查一次按键。那是迭代!