Как к substract из словаря оценивают в Пайтоне?

Я должен substract от значений словаря.

list1 = {'i': 1, 'k': 1, 'j': 1, 'o': 2, 'q': 1, 's': 1, 'x': 1, 'z': 1}
string = 'ikjoosgx'
for letter in string:
I NEED TO DECREASE list1 key of same name as letter VALUE BY 1. DIPSIT!
2
Можно ли уточнить подходы, которые вы попробовали в течение этих двух часов?
добавлено автор Frédéric Hamidi, источник

5 ответы

for letter in my_string:
    list1[letter] -= 1

Как примечание стороны, никогда не используйте последовательность как имя переменной, поскольку это - также название стандартного модуля.

Это не будет работать, если одно из писем не будет в словаре. В этом случае можно поместить попытку/кроме блок в петле.

for letter in my_string:
    try:
        list1[letter] -= 1
    except KeyError:
        pass  # your error handling goes here

Если вы хотите значение по умолчанию, можно заменить проход с:

list1[letter] = default_value

Или вы могли просто использовать Решение Окэзо.

1
добавлено
Лучше помещать try/ кроме в петле, я думаю.
добавлено автор wim, источник
Какую ошибку вы получали?
добавлено автор Volatility, источник
Остерегайтесь! Есть ' g' в последовательности, которая не является ключом list1, таким образом, вы получите KeyError
добавлено автор Ocaso Protal, источник
Но человек, это won' t работают, я уже связал = (= (хорошо, I' ll попробовали еще раз brb во втором с ответом
добавлено автор 5brickbomzh, источник
Эй, никакая проблема! Спасибо, это работало. Если it' s не, мы можем всегда использовать число по умолчанию. Так да кажется, что это работает правильно теперь =),
добавлено автор 5brickbomzh, источник

Другое решение, на этот раз используя старое доброе setdefault:

list1 = {'i': 1, 'k': 1, 'j': 1, 'o': 2, 'q': 1, 's': 1, 'x': 1, 'z': 1}
string1 = 'ikjoosgx'
for letter in string1:
    list1[letter] = list1.setdefault(letter, 0) - 1
1
добавлено

если я получаю ваше право вопроса, вы хотите это:

list1 = {'i': 1, 'k': 1, 'j': 1, 'o': 2, 'q': 1, 's': 1, 'x': 1, 'z': 1}
string = 'ikjoosgx'
for letter in string:
    if letter in list1:
        list1[letter] -= 1

print list1
>>> {'q': 1, 's': 0, 'z': 1, 'i': 0, 'x': 0, 'k': 0, 'j': 0, 'o': 0}
1
добавлено
for letter in string:
    list1[letter] = list1[letter] - 1
0
добавлено
как другие сказали, используйте заявление выгоды попытки
добавлено автор Calum, источник
Как делают вы обращаетесь с письмом ' g' в последовательности? ' g' не ключ в dict!
добавлено автор Ocaso Protal, источник

Это просто:

d[key] -= 1

Просто повторите ключей:

for letter in string:
    d[letter] -= 1
0
добавлено
Python
Python
7 654 участник(ов)

Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/577926

Python beginners
Python beginners
4 449 участник(ов)

Вопросы про Python для чайников. Cпам и троллинг неприемлем. Не злоупотребляйте стикерами. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Статистика тут: https://grstats.me/chat/x4qym2k5uvfkr3al6at7

pro.python
pro.python
1 090 участник(ов)

Сообщество разработчиков под Python Создатель: @rodgelius

Rude Python
Rude Python
971 участник(ов)

Python без „девочек”, здесь матерятся и унижают Django. Not gay friendly. Правила: t.me/rudepython/114107 @rudepython | t.me/rudepython

rupython
rupython
509 участник(ов)

Группа создана с целью оперативного получения ответов на возникающие вопросы по разработке на яп python, смежные темы, а также человеческого общения. Приветствую!

Python-programming
Python-programming
266 участник(ов)

Чат группы вконтакте https://vk.com/python_community