首页 > 解决方案 > 我用 dict.pop 的“For”直到最后都没有做

问题描述

在 Python 中,我试图从 dicio2 重命名 itens,但代码在最后一个之前停止:

在这里,我有这个带有数字和数字名称的字典:

dicio1 = {"1":"one",
          "2":"two",
          "3":"three",
          "4":"four",
          "5":"five",
          "6":"six"}

和 dicio2 的数字有一个值:

dicio2 = {"1":"QWE",
          "2":"QWE",
          "3":"QWE",
          "4":"QWE",
          "5":"QWE",
          "6":"QWE"}

这是我在最终运行中需要的:

dicio2 = {'one': 'QWE',
          'two': 'QWE',
          'three': 'QWE',
          'four': 'QWE',
          'five': 'QWE',
          'six': 'QWE'}

我使用了这段代码:

for v in dicio2:
    if v in dicio1:
        dicio2[dicio1[v]] = dicio2.pop(v)

但结果是:

{'6': 'QWE',
 'one': 'QWE',
 'two': 'QWE',
 'three': 'QWE',
 'four': 'QWE',
 'five': 'QWE'}

之后,我放了一个 print(v):

for v in dicio2:
    print(v)
    if v in dicio1:
        dicio2[dicio1[v]] = dicio2.pop(v)

结果是:

1
2
3
4
5
five
{'6': 'QWE', 'one': 'QWE', 'two': 'QWE', 'three': 'QWE', 'four': 'QWE', 'five': 'QWE'}

有人可以帮助我为什么会发生这种情况?我怎样才能在没有崩溃的情况下使用所有的itens?

我需要的完美模式是在不改变位置的情况下重命名密钥,但我在其他主题中看到这是不可能的,因为密钥无法重命名,解决方案是仅使用 POP 命令删除并创建另一个。

标签: pythondictionary

解决方案


也许你可以这样做:

output = {dicio1[k]: v for k, v in dicio2.items()}
print(output)
>>> {'one': 'QWE', 'two': 'QWE', 'three': 'QWE', 'four': 'QWE', 'five': 'QWE', 'six': 'QWE'}

推荐阅读