Почему Python .append () добавляет два значения вместо одного в списке? - PullRequest
0 голосов
/ 16 февраля 2020

У меня есть два списка и один двузначный:

a = ['Foo bar', 'Hello!']
b = {'Foo': 'bar', 'Hello': 'foo'}
c = []

Я пытаюсь заменить Foo на bar и Hello на foo в каждом элементе a и добавьте новые значения к c.

Однако, этот код дает следующий вывод:

for i in a:
    for entry in b:
        c.append(i.replace(entry, b.get(entry)))

print(c)
['bar bar', 'Foo bar', 'Hello!', 'foo!']

Ожидаемый результат:

['bar bar', 'foo!']

Я ожидал, что список c будет содержать только измененные значения, а не исходные.

Я что-то упустил?

Ответы [ 2 ]

3 голосов
/ 16 февраля 2020

Проблема, с которой вы сталкиваетесь, заключается в том, что вы всегда добавляете каждое значение в словарь, вы должны создать строку, а затем добавить ее после проверки словаря. Вы также можете использовать словари items, чтобы избежать получения значения отдельно от ключа

for i in a:
    new_val = i
    for key, val in b.items():
        new_val = new_val.replace(key, val)
    c.append(new_val)
0 голосов
/ 16 февраля 2020

Это должно работать:

a = ['Foo bar', 'Hello!']
b = {'Foo': 'bar', 'Hello': 'foo'}
c = []
for i in a:
    c.append(i)
    for entry in b:
        c[-1] = c[-1].replace(entry, b.get(entry))

print(c)

Вывод:

['bar bar', 'foo!']

Проблема с вашим текущим кодом заключается в том, что вы добавляете новый элемент при каждой замене - вам нужно только редактировать последний пункт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...