Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果字典键包含某个单词,我将如何删除它?_Python_Dictionary - Fatal编程技术网

Python 如果字典键包含某个单词,我将如何删除它?

Python 如果字典键包含某个单词,我将如何删除它?,python,dictionary,Python,Dictionary,一个关于在字典中存储河流及其各自位置的简单程序。我想知道如何循环遍历字典键,并查看字典键(或值)是否包含某个单词,如果该单词出现在该键中,请将其删除 例如:rivers\u dict={'missippi river':'missippi'} 如何删除字典关键字“密西西比河”中的“河”一词?我知道我可以分配这样的内容:rivers\u dict['missippi']=rivers\u dict.pop('missippi river')。有没有一种更模块化的方法?提前感谢。使用枚举函数,该函数

一个关于在字典中存储河流及其各自位置的简单程序。我想知道如何循环遍历字典键,并查看字典键(或值)是否包含某个单词,如果该单词出现在该键中,请将其删除

例如:
rivers\u dict={'missippi river':'missippi'}


如何删除字典关键字“密西西比河”中的“河”一词?我知道我可以分配这样的内容:
rivers\u dict['missippi']=rivers\u dict.pop('missippi river')
。有没有一种更模块化的方法?提前感谢。

使用枚举函数,该函数将对所有单词进行计数,如将其循环为
对于索引,枚举中的值(dic):

为什么不使用
dict
理解而不是就地执行
?替换
dict
中的键名,您可以通过使用
dict
来轻松完成此操作-

no_rivers_dict = { key.replace('river', ''):value for key, value in rivers_dict.items() }

print(no_rivers_dict)
输出

{'mississippi ': 'mississippi', 'nothing': 'nile'}

希望这有帮助。干杯

您可以使用正则表达式逻辑去掉不需要的部分密钥。问题是如何实现模块化逻辑

一个建议是将所有值复制到一个新字典中,然后删除旧的。如果在这一过程中出现问题,旧的一个仍然会完整地保留下来。副本完成后,可以删除旧副本

new_dict = {re.sub((r'river', '', k): v for k, v in rivers_dict.items()}
现在,这段代码没有经过测试,但如果您包括一个可复制的示例,我可以测试它,看看它是否达到了我想要的效果

因此有一个for循环,它接受旧字典中的每个键、值
(k,v)
对。然后,它使用正则表达式逻辑,特别是re.sub()修改密钥,将它们分配到新的目录中。这应该减去任何匹配的子字符串
river
。您需要导入regex模块

import re
您可以在此处阅读有关re.sub的更多信息


通过添加try-catch块,可以设置保护措施,以便旧词典在复制失败时不会被删除

如果您只想将“river”的实例作为一个完整的单词删除,并且还想删除相应的空格字符,您可以将dict理解和list理解结合起来,如下所示:

rivers_dict = {'mississippi river': 'mississippi'}
rivers_dict = {
    ' '.join(word for word in key.split() if word != 'river'): val
    for key, val in rivers_dict.items()
}
drop_words = {'river', 'stream', 'brook'}
rivers_dict = {'mississippi river': 'mississippi'}
rivers_dict = {
    ' '.join(word for word in key.split() if word not in drop_words): val
    for key, val in rivers_dict.items()
}
如果您需要执行很多操作,可以如下所示:

rivers_dict = {'mississippi river': 'mississippi'}
rivers_dict = {
    ' '.join(word for word in key.split() if word != 'river'): val
    for key, val in rivers_dict.items()
}
drop_words = {'river', 'stream', 'brook'}
rivers_dict = {'mississippi river': 'mississippi'}
rivers_dict = {
    ' '.join(word for word in key.split() if word not in drop_words): val
    for key, val in rivers_dict.items()
}

我不这么认为。一般来说,最好的方法是构建一个新的dict,一路过滤。如果它是可读的,请使用dict-comprehension。无法在适当的位置修改字典键——您必须删除旧项并编写新项。如果要对整个字典执行此操作,可以扫描所有项并使用如图所示的代码,也可以基于现有的字典(通常是更好的选择)构造一个新字典。由于
key.replace('river',''),因此不需要此条件
如果不存在Good Point@avigil,将只返回未更改的字符串-保留该字符串用于连接!无论如何,修改过的ans!