在python字典中添加密钥,但如果存在则重命名

时间:2020-09-29 07:54:10

标签: python dictionary

我有一个简单的脚本:

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'}

我该怎么做?

3 个答案:

答案 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'}