Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.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 - Fatal编程技术网

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引用的初始字典不再被引用,因此可能会被删除。