在Python中,通过drop更新字典键以键中的值开始

在Python中,通过drop更新字典键以键中的值开始,python,dictionary,Python,Dictionary,我有一本字典 dict = {'drop_key1': '10001', 'drop_key2':'10002'} dict中的键开始使用drop,我想通过从键中删除drop值来更新dict: 做这件事最好的方法是什么 d1 = {'drop_key1': '10001', 'drop_key2':'10002'} d2 = {k[5:]:v for k,v in d1.items()} print(d2) 输出 {'key1': '10001', 'key2': '10002'} 差不多

我有一本字典

dict = {'drop_key1': '10001', 'drop_key2':'10002'}
dict
中的键开始使用
drop
,我想通过从键中删除
drop
值来更新
dict

做这件事最好的方法是什么

d1 = {'drop_key1': '10001', 'drop_key2':'10002'}
d2 = {k[5:]:v for k,v in d1.items()}
print(d2)
输出

{'key1': '10001', 'key2': '10002'}
差不多

d1 = {'drop_key1': '10001', 'drop_key2':'10002'}
d2 = {k[5:]:v for k,v in d1.items()}
print(d2)
输出

{'key1': '10001', 'key2': '10002'}

一种方法是,对于字典中的每个
值,可以用新的字符串值替换字符串部分。例如:

d={k.replace('drop_u',''):v代表k,v在d.items()中,如果k.strip().startswith('drop_u')}
或者,您可以定义一个函数,并获取搜索字符串的索引(“
drop\uuu
”)。如果搜索字符串索引为0,则将其删除。例如:

def change_键(键,搜索):
start\u idx=key.find(搜索)
如果start_idx==0:
key=key.replace(搜索“”)
返回键
d={change_key(k,search=“drop_”):v代表k,v代表d.items()}
结果:

{'      drop_key1': '10001', 'key2': '10002'}
{'key1':'10001','key2':'10002'}
请注意,如果使用方法,则可以保证删除位于字符串开头的搜索字符串。例如:

d={'drop_key1':'10001','drop_key2':'10002'}
d={change_key(k,search=“drop_”):v代表k,v代表d.items()}
结果:

{'      drop_key1': '10001', 'key2': '10002'}

一种方法是,对于字典中的每个
值,可以用新的字符串值替换字符串部分。例如:

d={k.replace('drop_u',''):v代表k,v在d.items()中,如果k.strip().startswith('drop_u')}
或者,您可以定义一个函数,并获取搜索字符串的索引(“
drop\uuu
”)。如果搜索字符串索引为0,则将其删除。例如:

def change_键(键,搜索):
start\u idx=key.find(搜索)
如果start_idx==0:
key=key.replace(搜索“”)
返回键
d={change_key(k,search=“drop_”):v代表k,v代表d.items()}
结果:

{'      drop_key1': '10001', 'key2': '10002'}
{'key1':'10001','key2':'10002'}
请注意,如果使用方法,则可以保证删除位于字符串开头的搜索字符串。例如:

d={'drop_key1':'10001','drop_key2':'10002'}
d={change_key(k,search=“drop_”):v代表k,v代表d.items()}
结果:

{'      drop_key1': '10001', 'key2': '10002'}

@亚图:不,那完全错了。这将删除集合
{'d','r','o','p','.}
中的所有前导字符和尾随字符<代码>“drop\u prod\u foo\u pro”。例如,strip('drop\u')就是
“f”
。@yatu:不,那完全错了。这将删除集合
{'d','r','o','p','.}
中的所有前导字符和尾随字符<代码>“drop\u prod\u foo\u pro”。例如,strip('drop\u')只是
“f”
。这也将替换开头以外位置的子字符串
“drop\u”
。新版本还将更改
“drop\u foo”
表单的键,从技术上讲,它也不应该更改这些键。此外,它会将
“drop\u drop\u foodrop”
更改为
“foo”
,这是错误的。但是为什么要将
值编写为
“drop\u foo”
?这是错误的编程方法。在现实世界中,如果你不注意角落的情况,各种各样的问题最终都会出现。考虑到有些人可能只是复制和粘贴您的答案,并将其用于他们的相关问题,它应该完全符合规范。不过,我提到的第二个问题(以
“drop”
开头的字符串中多次出现
“drop”
)更可能发生。您可能可以将barderman的方法(即切片)与使用
startswith
的检查相结合。我不认为我们需要考虑所有的边缘情况,我们不知道op问题的特殊性。尽管就规范而言,baldernam的方法已经足够了,因为显然所有的键都是从子字符串
drop\uu
开始的。在这种情况下,不需要剥离。这还将替换除开头以外位置上的子字符串
“drop\u”
。新版本还将更改表单
“drop\u Foo”
的键,从技术上讲,它也不应该更改。此外,它会将
“drop\u drop\u foodrop”
更改为
“foo”
,这是错误的。但是为什么要将
值编写为
“drop\u foo”
?这是错误的编程方法。在现实世界中,如果你不注意角落的情况,各种各样的问题最终都会出现。考虑到有些人可能只是复制和粘贴您的答案,并将其用于他们的相关问题,它应该完全符合规范。不过,我提到的第二个问题(以
“drop”
开头的字符串中多次出现
“drop”
)更可能发生。您可能可以将barderman的方法(即切片)与使用
startswith
的检查相结合。我不认为我们需要考虑所有的边缘情况,我们不知道op问题的特殊性。尽管就规范而言,baldernam的方法已经足够了,因为显然所有的键都是从子字符串
drop\uu
开始的。在这种情况下,不允许剥离needed@yatu再次阅读问题:“…dict中的键开始与drop_u…”再次阅读问题。。。。嗯,好吧。。。只是一个建议,没有考虑到part@yatu再次阅读问题:“…dict中的键开始与drop_u…”再次阅读问题。。。。嗯,好吧。。。只是一个建议,错过了那部分