Вы связываете значение свойства this.imageTwo
, которое не существует. Таким образом, значение undefined
.
Не используйте квадратные скобки, если вы хотите строковую константу
<app-my-component imgName="imageTwo"></app-my-component>
^^^ = will be a string literal
Вы ищете 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
Я предпочитаю делать это в одной строке кода.
my_dict = {} my_dict[some_key] = my_dict.get(some_key, 0) + 1
Словари имеют функцию, добираются, который берет два параметра - ключ, который Вы хотите, и значение по умолчанию, если он не существует. Я предпочитаю этот метод defaultdict, поскольку Вы только хотите обработать случай, где ключ не существует в этой строке кода, не везде.
Вам нужно key in dict
идиома для этого.
if key in my_dict and not (my_dict[key] is None):
# do something
else:
# do something else
Однако необходимо, вероятно, рассмотреть использование defaultdict
(как dF предложенный).
Согласованный с cgoldberg. Как я делаю это:
try:
dict[key] += 1
except KeyError:
dict[key] = 1
Так или сделайте это как выше или используйте значение по умолчанию dict, как другие предположили. Не используйте если операторы. Это не Pythonic.
Как Вы видите из многих ответов, существует несколько решений. Один экземпляр 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
Путем Вы пытаетесь сделать это, назван LBYL (взгляд перед прыганием) так как Вы проверяете условия прежде, чем попытаться увеличить Ваше значение.
другой подход называют EAFP (легче спросить прощение тогда разрешение). В этом случае Вы просто попробовали бы операцию (увеличьте значение). Если это перестало работать, Вы ловите исключение и устанавливаете значение к 1. Это - немного больше Pythonic способ сделать это (IMO).
http://mail.python.org/pipermail/python-list/2003-May/205182.html
Чтобы ответить на вопрос « как я могу узнать, был ли данный индекс в этом 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], возвращая значение для ключа (которое может быть новым установленным значением).