old_dict = {"~desc1":"adjustment1","~desc23":"adjustment3"}
# get the id of this dict, just for comparison later.
old_id = id(old_dict)
new_dict = {k[1:]: v for k, v in old_dict.items()}
print(f'Is the result still the same dictionary? Answer: {old_id == id(new_dict)}')
现在,如果您想在适当的位置修改字典,您可以在键上循环,并根据您的喜好调整键/值:
old_dict = {"~desc1":"adjustment1","~desc23":"adjustment3"}
# get the id of this dict, just for comparison later.
old_id = id(old_dict)
for k in [*old_dict.keys()]: # note the weird syntax here
old_dict[k[1:]] = old_dict.pop(k)
print(f'Is the result still the same dictionary? Answer: {old_id == id(old_dict)}')
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'}
有很多方法可以通过列表理解或
for
-循环来实现这一点。重要的是要理解词典是可变的。这基本上意味着您可以修改现有词典或创建新词典如果您想创建一个新的解决方案(我会推荐它!-请参见下面的“警告之词”),答案by @Ethem_Turgut和by @pakpe中提供的两种解决方案都可以实现这一目的。我可能会说:
现在,如果您想在适当的位置修改字典,您可以在键上循环,并根据您的喜好调整键/值:
对后一种方法有一个警告:
您应该知道,在循环键时正在修改键。在大多数情况下,这是有问题的,如果直接在
old_dict
上循环,甚至会导致RuntimeError
。我通过显式地将键解压到一个列表中,并使用[*old_dict.keys()]
在该列表上循环,避免了这种情况为什么在循环键的同时修改键会有问题?例如,假设在
old_dict
中有键'~key1'
和'key1'
。现在,当您的循环处理'~key1'
时,它将把它修改为'key1'
,它已经存在于old_dict
中,因此它将用'~key1'
中的值覆盖'key1'
的值因此,只有在确定不会产生像前面提到的示例那样的问题时,才使用后一种方法。如果您不确定,只需创建一个新字典
这是一本词典:
相关问题 更多 >
编程相关推荐