Моё «За» с dict.pop не делает до конца - PullRequest
1 голос
/ 06 января 2020

В Python я пытаюсь переименовать itens из dicio2, но код останавливается перед последним:

здесь, у меня есть этот dict с номером и именем числа:

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

после этого я положил отпечаток (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 без cra * sh?

Идеальный режим, который мне был нужен, это переименовать ключ без изменения вашей позиции, но я видел в других topi c, что невозможно потому что ключ не может быть переименован, а решение - использовать только команду POP для удаления и создания другого.

Ответы [ 4 ]

2 голосов
/ 06 января 2020

Может быть, вы можете просто сделать это:

output = {dicio1[k]: v for k, v in dicio2.items()}
print(output)
>>> {'one': 'QWE', 'two': 'QWE', 'three': 'QWE', 'four': 'QWE', 'five': 'QWE', 'six': 'QWE'}
1 голос
/ 06 января 2020

Вы не можете изменять ключи или изменять размер dicio2 во время итерации. Используйте dicio1 для итерации, а затем измените dicio2

for key in dicio1:
    if key in dicio2:
        newKey = dicio1.get(key)
        value = dicio2.pop(key)
        dicio2[newKey] = value
1 голос
/ 06 января 2020
dicio1 = {"1":"one",
          "2":"two",
          "3":"three",
          "4":"four",
          "5":"five",
          "6":"six"}

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

temp = dict()
for k, v in dicio1.items():
    if k in dicio2:
        temp[v] = dicio2[k]
dicio2 = temp
print(dicio2)

Вывод: {'one': 'QWE', 'two': 'QWE', 'three': 'QWE', 'four': 'QWE', 'five': 'QWE', 'six': 'QWE'}

1 голос
/ 06 января 2020
dicio1 = {"1":"one",
          "2":"two",
          "3":"three",
          "4":"four",
          "5":"five",
          "6":"six"}

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

dicio2 = dict( (dicio1[k], dicio2[k]) for k,_ in dicio2.items() if k in dicio1)
...