动态更改字典中的键值

2024-09-25 00:21:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在检查字典中的键,如果它包含space,请删除它。你知道吗

def query_combination(sentence,mydict):
    for key in mydict.keys():
        if key == 'key':
            pass
        else:
            print 'key is : ',key
            if " " in key:                
                temp = key
                key = key.replace(' ',"")
                print 'new key : ',key                    
                sentence = sentence.replace(temp ,key)
                print 'new sentence : ',sentence
    print mydict
mydict = {'films': {'match': ['Space', 'Movie', 'six', 'two', 'one']}, u'Popeye Doyle': {'score': 100, 'match': [u'People', 'heaven', 'released']}}
sentence ='What films featured the character Popeye Doyle'
combination = query_combination(sentence,mydict)

我无法动态地将新键值更改为mydict。有什么好的建议吗


Tags: keyinnewifmatchquerytempmydict
3条回答

如果从字典中获取一个字符串,然后对其进行更改并生成一个新字符串,则字典将不知道该字符串;您可以向字典中添加新条目并删除旧条目:

        if " " in key:                
            newkey = key.replace(' ',"")
            mydict[newkey] = mydict[key]
            del mydict[key]

            print 'new key : ', newkey

key = key.replace(' ',"")不影响字典中的实际键,它正在更改该键的一个副本。您需要使用新键将值添加到字典中,然后删除旧键。有一种方法:

def query_combination(sentence, mydict):
    for old_key, new_key in [(key, key.replace(' ', '')) for key in mydict if ' ' in key]:
        mydict[new_key] = mydict.pop(old_key)
        sentence = sentence.replace(old_key, new_key)

但是,请注意,您正在替换字符串sentence中的键,但是sentence对于函数query_combination()是本地的,因此外部作用域sentence不受替换的影响。我不确定您是否希望您的代码会这样做,但如果是这样,您可以简单地从函数返回修改后的sentence,或者将其作为一个项包含在字典中。你知道吗

考虑到sentence实际上并没有被函数更新,您可以将整个函数简化为字典理解:

>>> mydict = {'films': {'match': ['Space', 'Movie', 'six', 'two', 'one']}, u'Popeye Doyle': {'score': 100, 'match': [u'People', 'heaven', 'released']}}
>>> mydict = {key.replace(' ', '') : value for key, value in mydict.items()}
>>> mydict
{'films': {'match': ['Space', 'Movie', 'six', 'two', 'one']}, u'PopeyeDoyle': {'score': 100, 'match': [u'People', 'heaven', 'released']}}

你可以试试这个

def query_combination(sentence,mydict):
    for key in mydict.iterkeys():
        if " " in key:                
            temp = key
            mydict[key.replace(" ","")] = mydict[key] # create new key
            del mydict[key] # delete old key
            sentence = sentence.replace(temp ,key)

另一个解决办法是

mydict[key.replace(" ","")] = mydict.pop(key)

相关问题 更多 >