【发布时间】:2017-11-24 17:13:22
【问题描述】:
我在 Python 中有以下字典
dict1 = {"key1": 2345, "key2": 356, "key3": 773, "key44": 88, "key333": 12, "key3X": 13}
我想删除不遵循"xxx#" 或"xxx##" 模式的键。即,三个字符后跟一个一位整数或两位整数。使用上面的例子,这是:
new_dict = {"key1": 2345, "key2": 356, "key3": 773, "key44": 88}
对于一个或两个键,我创建新字典的方式是使用列表理解:
small_dict = {k:v for k,v in your_dic.items() if v not in ["key333", "key3X"]}
但是,我将如何使用正则表达式/其他字符串方法来删除这些字符串?
单独的问题:如果有特殊例外怎么办,例如一个我想要的键叫"helloXX"?
【问题讨论】:
-
@KevinMGranger 手动搜索,就像我对
small_dict所做的那样。 -
您已经演示了如何根据布尔条件过滤字典,然后您可以轻松修改它以使用正则表达式。
-
@KevinMGranger 例外是我精神上的症结所在。我想过滤正则表达式或
"helloXX"指定的模式之外的两个键?我想这样做的方法是new_dict = {k:dict1[k] for k in dict1 for k in [re.match('[^\d\s]+\d{1,2}$', k), "helloXX"}? -
@ShanZhengYang:这是一个很好的模式,但是你的条件会失败,因为
re.match将返回一个正则表达式对象,而不是str,所以它不会正确过滤。只需使用该模式,而不是包含该模式和异常字符串的列表。 -
@Billy 谢谢你的澄清。这正是我难以理解的。
标签: python regex string dictionary