寻找最好的if语句结构

时间:2017-02-09 11:33:28

标签: python function

为了创建一个以后需要创建另一个函数的函数,我正在使用dict和keys。通过这种方式,我一直在搜索有关它们如何工作的一些信息。但是当我必须使用dict和if语句时,我通常会被卡住。

我在一个函数中工作,该函数返回dict中的值的数量,这也是dict中的键。我的想法是使用for循环,但我陷入了if语句代码。这似乎是错的,但我不知道会是什么。我已经推断出我必须使用in运算符和变量k和d,以及索引但我不知道我是否正确使用它们。 任何帮助都会有用。 提前致谢

这是我目前的进展:

def count_values_that_are_keys(d):
'''(dict) -> int

Return the number of values in d that are also keys in d.

>>> count_values_that_are_keys({1: 2, 2: 3, 3: 3})
3
>>> count_values_that_are_keys({1: 1})
1
>>> count_values_that_are_keys({1: 2, 2: 3, 3: 0})
2
>>> count_values_that_are_keys({1: 2})
0
'''

result = 0
for k in d:
    if [d in [k]]: # This part it seems wrong cause I don't get what I expect
         result = result + 1

return result

3 个答案:

答案 0 :(得分:1)

坚持使用当前的方法,只需制作一个字典键列表,然后检查该列表中字典值的成员资格就更容易了。对于大型词典,您需要使用dict_keys = set(d.keys())来加快查找速度。

def count_values_that_are_keys(d):
    '''(dict) -> int

    Return the number of values in d that are also keys in d.

    >>> count_values_that_are_keys({1: 2, 2: 3, 3: 3})
    3
    >>> count_values_that_are_keys({1: 1})
    1
    >>> count_values_that_are_keys({1: 2, 2: 3, 3: 0})
    2
    >>> count_values_that_are_keys({1: 2})
    0
    '''

    dict_keys = d.keys()    

    result = 0
    for key, value in d.items():
        if value in dict_keys:
            result += 1

    return result

print(count_values_that_are_keys({1: 2, 2: 3, 3: 3}))
print(count_values_that_are_keys({1: 1}))
print(count_values_that_are_keys({1: 2, 2: 3, 3: 0}))
print(count_values_that_are_keys({1: 2})) 

答案 1 :(得分:1)

def count_values_that_are_keys(d):
    return sum([x in d.keys() for x in d.values()])

使用列表理解构建包含True / False的列表。 Sum将True视为1,将False视为0。

答案 2 :(得分:0)

def count_values_that_are_keys(d):
    '''(dict) -> int

    Return the number of values in d that are also keys in d.
   
    >>> count_values_that_are_keys({1: 2, 2: 3, 3: 3})
    3
    >>> count_values_that_are_keys({1: 1})
    1
    >>> count_values_that_are_keys({1: 2, 2: 3, 3: 0})
    2
    >>> count_values_that_are_keys({1: 2})
    0
    #x in d.keys()for x in d.values()
    '''
    
    result = 0
    for k in d:
        if d[k] in d.keys():
             result = result + 1

    return result