我有一个简单的脚本:
d = {}
keys = ['f', 'f', 'f', 'f']
for k in keys:
if k in d:
k += '_copy'
d[k] = 'test'
print(d)
它产生如下输出:
{'f': 'test', 'f_copy': 'test'}
但是我需要通过添加后缀来重命名密钥
_copy
每次添加已经存在的密钥。所以输出应该是这样的:
{'f': 'test', 'f_copy': 'test', 'f_copy_copy': 'test', 'f_copy_copy_copy': 'test'}
我该怎么做?
答案 0 :(得分:1)
不确定这正是您要执行的操作,但是可以使用itertools.accumulate
简化以上操作:
from itertools import accumulate
keys = ['f', 'f', 'f', 'f']
d = dict.fromkeys(accumulate(keys, lambda i,_: i+'_copy'), 'test')
print(d)
{'f': 'test',
'f_copy': 'test',
'f_copy_copy': 'test',
'f_copy_copy_copy': 'test'}
答案 1 :(得分:0)
for循环会将循环的每次迭代k
重置为keys
的相应值。您可以计算迭代次数并创建新密钥:
d = {}
keys = ['f', 'f', 'f', 'f']
for i, k in enumerate(keys):
if k in d:
k = f"f{i*'_copy'}"
d[k] = 'test'
print(d)
出局:
{'f': 'test', 'f_copy': 'test', 'f_copy_copy': 'test', 'f_copy_copy_copy': 'test'}
答案 2 :(得分:0)
以下方法应该起作用:
d = {}
keys = ['f', 'f', 'f', 'f']
d_count={i:0 for i in set(keys)}
for k in keys:
m=k
k+=d_count[k]*'_copy'
d_count[m]+=1
d[k] = 'test'
print(d)
输出:
{'f': 'test', 'f_copy': 'test', 'f_copy_copy': 'test', 'f_copy_copy_copy': 'test'}