Проверьте, существует ли данный ключ уже в словаре, и увеличьте его

Вы связываете значение свойства this.imageTwo, которое не существует. Таким образом, значение undefined.

Не используйте квадратные скобки, если вы хотите строковую константу

<app-my-component imgName="imageTwo"></app-my-component>
                             ^^^ = will be a string literal
282
задан Niels Bom 16 April 2015 в 01:55
поделиться

7 ответов

Вы ищете collections.defaultdict (доступный для Python 2.5 +). Это

from collections import defaultdict

my_dict = defaultdict(int)
my_dict[key] += 1

сделает то, что Вы хотите.

Для обычного Python dict s, если нет никакого значения для данного ключа, Вы будете не , добираются None, когда доступ к dict - KeyError будет повышен. Таким образом, если бы Вы хотите использовать постоянного клиента dict, вместо Вашего кода Вы использовали бы

if key in my_dict:
    my_dict[key] += 1
else:
    my_dict[key] = 1
320
ответ дан JamesThomasMoon1979 23 November 2019 в 01:54
поделиться

Я предпочитаю делать это в одной строке кода.

my_dict = {}

my_dict[some_key] = my_dict.get(some_key, 0) + 1

Словари имеют функцию, добираются, который берет два параметра - ключ, который Вы хотите, и значение по умолчанию, если он не существует. Я предпочитаю этот метод defaultdict, поскольку Вы только хотите обработать случай, где ключ не существует в этой строке кода, не везде.

287
ответ дан kba 23 November 2019 в 01:54
поделиться

Вам нужно key in dict идиома для этого.

if key in my_dict and not (my_dict[key] is None):
  # do something
else:
  # do something else

Однако необходимо, вероятно, рассмотреть использование defaultdict (как dF предложенный).

49
ответ дан Eli Bendersky 23 November 2019 в 01:54
поделиться

Согласованный с cgoldberg. Как я делаю это:

try:
    dict[key] += 1
except KeyError:
    dict[key] = 1

Так или сделайте это как выше или используйте значение по умолчанию dict, как другие предположили. Не используйте если операторы. Это не Pythonic.

13
ответ дан ryeguy 23 November 2019 в 01:54
поделиться

Как Вы видите из многих ответов, существует несколько решений. Один экземпляр LBYL (взгляд перед прыганием) еще не был упомянут, has_key () метод:

my_dict = {}

def add (key):
    if my_dict.has_key(key):
        my_dict[key] += 1
    else:
        my_dict[key] = 1

if __name__ == '__main__':
    add("foo")
    add("bar")
    add("foo")
    print my_dict
11
ответ дан bortzmeyer 23 November 2019 в 01:54
поделиться

Путем Вы пытаетесь сделать это, назван LBYL (взгляд перед прыганием) так как Вы проверяете условия прежде, чем попытаться увеличить Ваше значение.

другой подход называют EAFP (легче спросить прощение тогда разрешение). В этом случае Вы просто попробовали бы операцию (увеличьте значение). Если это перестало работать, Вы ловите исключение и устанавливаете значение к 1. Это - немного больше Pythonic способ сделать это (IMO).

http://mail.python.org/pipermail/python-list/2003-May/205182.html

7
ответ дан Corey Goldberg 23 November 2019 в 01:54
поделиться

Чтобы ответить на вопрос « как я могу узнать, был ли данный индекс в этом dict уже установлен на значение, отличное от None », я бы предпочел следующее:

try:
  nonNone = my_dict[key] is not None
except KeyError:
  nonNone = False

Это соответствует уже вызвал концепцию EAFP (проще попросить прощения, чем разрешения). Это также позволяет избежать поиска дублирующихся ключей в словаре, как это было бы в key в my_dict и my_dict [key] is not None , что интересно, если поиск стоит дорого.

Для реальной проблемы , которую вы поставили, то есть увеличения int, если оно существует, или установки его на значение по умолчанию в противном случае, я также рекомендую

my_dict[key] = my_dict.get(key, default) + 1

, как в ответе Эндрю Уилкинсона.

Есть третье решение, если вы храните изменяемые объекты в своем словаре. Типичным примером этого является multimap , где вы храните список элементов для ваших ключей. В этом случае вы можете использовать:

my_dict.setdefault(key, []).append(item)

Если значение для ключа не существует в словаре, метод setdefault установит его на второй параметр setdefault. Он ведет себя так же, как стандартный my_dict [key], возвращая значение для ключа (которое может быть новым установленным значением).

18
ответ дан 23 November 2019 в 01:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: