Python 如何替换字典中所有键的第一个字符?
替换字典中所有键的第一个字符的最佳方法是什么Python 如何替换字典中所有键的第一个字符?,python,Python,替换字典中所有键的第一个字符的最佳方法是什么 old_cols= {"~desc1":"adjustment1","~desc23":"adjustment3"} 我正试着去 new_cols= {"desc1":"adjustment1","desc23":"adjustment3"} 我试过: for k,v in old_col
old_cols= {"~desc1":"adjustment1","~desc23":"adjustment3"}
我正试着去
new_cols= {"desc1":"adjustment1","desc23":"adjustment3"}
我试过:
for k,v in old_cols.items():
new_cols[k]=old_cols.pop(k[1:])
这是一本词典:
old_cols= {"~desc1":"adjustment1","~desc23":"adjustment3"}
new_cols = {k.replace('~', ''):old_cols[k] for k in old_cols}
print(new_cols)
#{'desc1': 'adjustment1', 'desc23': 'adjustment3'}
old_cols={~desc1:adjustment1,~desc23:adjustment3}
new_cols={}
对于旧项目中的k、v:
new_key=k[1:]
新密码[新密码]=v
有很多方法可以通过列表理解或for循环来实现这一点。重要的是要理解词典是可变的。这基本上意味着您可以修改现有词典或创建新词典
如果你想创建一个新的,我会推荐它请参阅下面的“警告一句…”,答案中提供的两种解决方案,并执行该技巧。我可能会说: 旧目录={~desc1:adjustment1,~desc23:adjustment3} 获取此dict的id,以便稍后进行比较。 旧的id=偶像的dict new_dict={k[1::]:v代表k,v代表旧_dict.items} printf'结果仍然是相同的字典吗?回答:{old_id==idnew_dict}' 现在,如果您想在适当的位置修改字典,您可以在键上循环,并根据您的喜好调整键/值: 旧目录={~desc1:adjustment1,~desc23:adjustment3} 获取此dict的id,以便稍后进行比较。 旧的id=偶像的dict 对于k in[*old_dict.keys]:注意这里的奇怪语法 旧的 printf'结果仍然是相同的字典吗?回答:{old_id==idold_dict}' 对后一种方法的警告: 您应该知道,在循环键时正在修改键。在大多数情况下,这是有问题的,如果直接在old_dict上循环,甚至可能导致运行时错误。我通过显式地将键解包到列表中并使用[*old_dict.keys]在该列表上循环来避免这一问题 为什么在循环键的同时修改键会有问题?例如,假设在旧目录中有键“~key1”和“key1”。现在,当循环处理“~key1”时,它会将其修改为旧目录中已存在的“key1”,从而用“~key1”中的值覆盖“key1”的值
因此,只有在确定不会产生像前面提到的示例那样的问题时,才使用后一种方法。如果您不确定,只需创建一个新字典 如果一个键包含多个平铺,则无法正常工作character@Kolay.Ne. 符合OP的要求。“没有迹象表明这些键在tilde上有超过个字符。”papke不同意。奥普对蒂尔德一点也没说。问题是关于从密钥中删除第一个元素,您的代码有什么问题?最好的方法是什么?如果你想创建一个新的,我会推荐它!您为什么推荐它?@Kolay.Ne它避免了后面一种方法的警告中提到的潜在问题。但在某些情况下,修改词典是有意义的,这要视情况而定。哦,对不起,我还没有完全阅读答案。我认为您建议不要创建新的dictionary对象而不是修改旧的dictionary对象,而是不要执行old_dict={…对于old_dict.items中的k,v}将old_dict修改的结果保存到同一个dictionary对象variable@Kolay.Ne关于你是否创建新词典的问题,无论是将结果引用到新变量,如new_dict还是back to old_dict,这都无关紧要,在这两种情况下,您都创建了一个新字典。在第一种情况下,只需用旧的dict替换新的dict即可检查这一点。print语句仍将打印False。@Kolay.Ne如果重用old_dict而不是一个新变量,会发生什么变化,但是,old_dict引用的初始字典不再被引用,因此可能会被删除。