首页 > 解决方案 > Python,如果键已经存在,如何将键+数字添加到字典

问题描述

我是初学者,所以这可能很愚蠢,但我不知道如何将新密钥添加到字典中,如果密钥已经在其中,而不覆盖我它。

目前我有:

l1 = ["name = Carl",
"type = Fighterplane",
"name = wing fusulage",
"name = landing gear"]

并使用我的代码我得到:

for i in l1:
    if "=" in i:
        i = i.split("=")
        key = i[0].strip()
        value = i[-1].strip()
        d1[key] = value
print(d1)

>>> d = {'name': 'landing gear', 
         'type': 'Fighterplane'}

但我想得到:

d = {"name":"Carl",
    "type":"Fighterplane",
    "name-1":"wing fusulage",
    "name-2":"landing gear"}

我一直在尝试一些东西,并在密钥已经在字典中时运行了一个 while 循环,但我只有 "name-1" 并覆盖 "name-1" 或 "name-1-2-3-4 。 ……”。这应该很难,因为我可以通过创建新的 Windows 文件夹并获得“新文件夹 (2)”来做到这一点,但我无法绕开它,搜索只提供了我的基本内容。

标签: pythonpython-3.xdictionary

解决方案


您可以使用字典理解:

r = {}
for l in l1:
    k, v = map(str.strip, l.split('='))
    r.setdefault(k, []).append(v)

result = {k if i==0 else f'{k}-{i}': e  for k, v in r.items() for i, e in enumerate(v)}

输出:

{'name': 'Carl',
 'name-1': 'wing fusulage',
 'name-2': 'landing gear',
 'type': 'Fighterplane'}

如果字典中的插入顺序很重要:

r = {}
count = {}
for l in l1:
    k, v = map(str.strip, l.split('='))
    if k not in count:
        count[k] = 1
        r[k] = v
    else:
        r[f'{k}-{count[k]}'] = v
        count[k] += 1

r

输出:

{'name': 'Carl',
 'type': 'Fighterplane',
 'name-1': 'wing fusulage',
 'name-2': 'landing gear'}

推荐阅读