我的字典看起来像这样:
result = {'Mars': 1358996659, 'Snickers': 26100257, 'Ben%and%Jerry's': 102656, 'Tootsie%roll': 3825986}
我想删除'%' ,然后用空格替换它。
我已经尝试过遍历这个列表:
for key in result:
if "%" in key:
key.replace("%"," ")
print(key)
但它没有用。我也尝试过其他循环,但似乎没有什么对我有用。
我想最终得到一个如下字典:
result = {'Mars': 1358996659, 'Snickers': 26100257, 'Ben and Jerry's': 102656, 'Tootsie roll': 3825986}
答案 0 :(得分:2)
使用dictionary comprehension构建新词典,以便您可以一次性更换密钥:
result = {key.replace('%', ' '): value for key, value in result.items()}
理解包括:
:
:
之后但for
for
循环;您将获得与key-value
循环迭代一样多的for
对(除非您添加更多for
循环或if
过滤器)。您自己的解决方案不起作用,因为str.replace()
会创建一个 new 字符串对象并返回该对象。旧字符串永远不会更改,因为字符串不可变;它们不能就地改变。如果你想循环完成工作,你必须:
str.replace()
操作的结果。但是,在字典上进行循环(删除和添加键变异)时,循环遍历字典是不安全的,因此不受支持。你必须循环遍历密钥的副本;使用list(result)
创建一个:
for key in list(result):
if '%' in key:
new_key = key.replace('%', ' ')
value = result.pop(key) # remove the old key, store the value
result[new_key] = value
此时,使用字典理解重新生成字典会更容易。
请注意,在两种方法中,如果用'%'
替换' '
会导致冲突,则最终可以减少密钥数量!处理后剩余的值取决于最后处理的重复密钥。
答案 1 :(得分:0)
key.replace("%"," ")
没有做你认为的事情。它不会更改key
,它会返回新的值。我必须修复您的数据,如下所示:
>>> result = {'Mars': 1358996659, 'Snickers': 26100257, "Ben%and%Jerry's": 102656, 'Tootsie%roll': 3825986}
然后:
>>> result2 = {}
>>> for key, value in result.items():
result2[key.replace("%"," ")] = value
>>> result2
{'Tootsie roll': 3825986, "Ben and Jerry's": 102656, 'Snickers': 26100257, 'Mars': 1358996659}
答案 2 :(得分:0)
下面的代码会将替换的密钥存储在变量中,您可以将其添加到字典中,同时从字典中删除旧密钥和值。以下代码应该为您提供所需的输出:
result = {'Mars': 1358996659, 'Snickers': 26100257, "Ben%and%Jerry's": 102656, 'Tootsie%roll': 3825986}
for key, value in result.items():
if '%' in key:
new_key = key.replace('%', ' ')
del result[key]
result[new_key] = value
print(result)
这是你的输出:
{'Mars': 1358996659, 'Snickers': 26100257, "Ben and Jerry's": 102656, 'Tootsie roll': 3825986}