0

尝试使用 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 它不返回任何字符串,它不应该返回。我找不到我的代码有任何问题,所以如果您能指出我忽略的错误,我将不胜感激。

4

5 回答 5

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}

Hth,
亚伦

于 2013-10-02T02:49:55.470 回答
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}
于 2013-10-02T02:54:31.037 回答
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以键中的第一项失败,则函数将返回

于 2013-10-02T03:27:45.513 回答
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
结果是:无
结果是:没有

为什么?因为通过减少缩进,else将附加到for,并且根据此文档,只有在循环正常退出时(即,没有or ),才会执行else部分 in ,这就是为什么它将遍历所有条目,并且仅当未找到密钥,它将返回字符串“Nothing”。否则它将返回,因为您只有语句。for..elseforbreakreturnNonereturn

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

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

哪个逻辑是保存dictionary[key]in variable的原始值result,如果 key 不可用,就会赋值给 value 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)

会产生

结果是:1
结果是:没有
于 2013-10-02T05:03:19.490 回答
0

如果没有字典,您似乎想计划一下。但是,您已经创建了一个。取出退货一无所有。

于 2013-10-02T12:25:52.610 回答