Python函数没有返回正确的输出

时间:2013-10-02 02:43:18

标签: python python-2.7 dictionary

尝试使用python更改与字典中的键相关联的值,而不是返回正确的输出

def fetchAndReplace(dictionary,key,newValue):
    keys = dictionary.keys()
    for i in keys:
        if i == key:
            print dictionary[key]
            dictionary[key] = newValue
            return

        else: 
            return "Nothing"

当我把这个称为字典{'x':3,'y':2}时,x表示键,6表示newValue 它返回的字符串没有,它不应该。我发现我的代码没有任何问题,所以如果你能指出我忽略的错误,我会很感激。

5 个答案:

答案 0 :(得分:3)

问题是你是return第一次迭代,所以你永远不会得到第二个密钥。

试试这个:

def fetchAndReplace(dictionary, key,newValue):
    keys = dictionary.keys()
    for i in keys:
        if i == key:
            dictionary[key] = newValue

    return dictionary



print fetchAndReplace({'x':3,'y':2}, 'x', 6)

输出:

{'y': 2, 'x': 6}

此外,您可以使用dict.update方法完成与函数相同的操作:

>>> mydict = {'x':3,'y':2}
>>> mydict.update({'x': 6})
>>> print mydict
{'y': 2, 'x': 6}

H个,
亚伦

答案 1 :(得分:2)

认为你正试图按照以下方式做点什么:

def fetchAndReplace(dictionary,key,newValue):
    if key in dictionary:
        dictionary[key]=newValue
        return dictionary
    else:
        return 'Nothing' 

di=  {'x':3,'y':2}

print fetchAndReplace(di, 'z', 6)    
print fetchAndReplace(di, 'x', 6)

打印:

Nothing
{'y': 2, 'x': 6}

答案 2 :(得分:0)

打印语句总是有帮助

def fetchAndReplace(dictionary,key,newValue):
    keys = dictionary.keys()
    print 'keys:', keys
    for i in keys:
        print 'i:', i, 'i == key:', i == key
        if i == key:
            print dictionary[key]
            dictionary[key] = newValue
            return

        else: 
            return "Nothing"

字典中的项几乎任意有序,如果条件语句if i == key因键中的第一项失败,函数将返回

答案 3 :(得分:0)

我很想回答这个问题。

您只需要删除两个制表符(如果使用空格,则为8),以使代码正常工作。

减少else:return "Nothing"的缩进

结果:

def fetchAndReplace(dictionary, key, newValue):
    keys = dictionary.keys()
    for i in keys:
        if i == key:
            print dictionary[key]
            dictionary[key] = newValue
            return
    else:
        return "Nothing"

dictionary = {"x":1, "y":2}
print "The result is: " + str(fetchAndReplace(dictionary,"x",3))
print "The result is: " + str(fetchAndReplace(dictionary,"z",0))

这将产生:

1
The result is: None
The result is: Nothing

为什么呢?因为通过减少缩进,else将附加到for,并且根据此documentationelse中的for..else部分将仅在for循环正常退出(即没有breakreturn),这就是为什么它将遍历所有条目,并且只有在找不到密钥时,它才会返回字符串“没有”。否则它将返回None,因为您只有语句return

但正如其他人注意到的那样,你可能会想要这样的东西:

def fetchAndReplace(dictionary, key, newValue):
    result = dictionary.get(key, "Nothing")
    dictionary[key] = newValue
    return result

哪个逻辑用于将dictionary[key]的原始值保存在变量result中,如果该密钥不可用,则会为其分配值Nothing。然后,您将该密钥的值替换为dictionary[key] = newValue,然后返回result

运行此代码:

dictionary = {"x":1, "y":2}
print "The result is: " + fetchAndReplace(dictionary,"x",3)
print "The result is: " + fetchAndReplace(dictionary,"z",0)

将产生

The result is: 1
The result is: Nothing

答案 4 :(得分:0)

似乎你想在没有字典的情况下进行计划。但是,您已经创建了一个。拿出没有回报。