Редактирование каждого элемента в списках в значениях словаря (Python) - PullRequest
0 голосов
/ 29 апреля 2020

Вот моя попытка захватить словарь:

pairs = {'EMOTIONS': ['happy', 'angry', 'sad', 'calm'], 'TRAITS': ['impatient', 'persistent', 'meek']}

И превратить его в словарь, значения которого записаны в виде фразы, так что:

pairs = {'EMOTIONS': ['I am happy', 'I am angry', 'I am sad', 'I am calm'], 'TRAITS': ['I am impatient', 'I am persistent', 'I am stubborn']} 

Вот код так far:

pairs = {'EMOTIONS': ['happy', 'angry', 'sad', 'calm'], 'TRAITS': ['impatient', 'persistent', 'meek']}
I_am = 'I am '

for title, words in pairs.items():
    words = [I_am+word for word in words]

Я явно что-то не так делаю, потому что когда я запрашиваю print (pair) , он возвращает тот же словарь, с которого я начал. Что я могу изменить, чтобы сделать эту работу?

Ответы [ 4 ]

0 голосов
/ 29 апреля 2020

Когда вы говорите

    words = [I_am+word for word in words]

, вы создаете новый список с префиксом, который вы ищете, и присваиваете этот список локальной переменной words, но вы не изменяете значение dict ни при каких условиях. путь. Чтобы добиться этого, это должно работать:

new_pairs = {key: [I_am + adjective for adjective in pairs[key]] for key in pairs}
0 голосов
/ 29 апреля 2020

Обязательно изменяйте список, а не просто перепривязывайте переменную l oop:

for words in pairs.values():
    words[:] = [I_am + word for word in words]
    # or, if you want to be fancy
    words[:] = map(I_am.__add__, words)

При этом используется назначение среза для изменения объекта list.

0 голосов
/ 29 апреля 2020

Использование сингла для l oop.

    pairs = {'EMOTIONS': ['happy', 'angry', 'sad', 'calm'], 'TRAITS': ['impatient', 'persistent', 'meek']}
    dic = {}
    for x,y in pairs.items():dic[x]=list(map(lambda x:'I am '+x,y))
    print(dic)
0 голосов
/ 29 апреля 2020

Попробуйте создать новый словарь и записать его в for l oop:

modpairs = {}
for title, words in pairs.items():
    words = [I_am+word for word in words]
    modpairs[title] = words
print(modpairs)
...