в цикле, только добавить в словарь или список или кортеж, если не содержит ключ - PullRequest
1 голос
/ 14 августа 2010

Я зациклен на Python и хочу добавить ключ в словарь, только если его еще нет в коллекции.

Как я могу это сделать?

mydic = {}

for x in range(100):
    ??

1 Ответ

5 голосов
/ 14 августа 2010

Для диктовки это просто и быстро:

for x in range(100):
  if x not in mydic:
    mydic[x] = x  # or whatever value you want

то есть просто проверьте с not in вместо in.

Это здорово для диктата. Для списка это будет очень медленно (квадратично); для скорости вам нужно добавить вспомогательный набор (надеюсь, что все элементы в списке могут быть хэшируемыми) перед циклом, а также проверить и обновить его в цикле. I.e.:

auxset = set(mylist)
for x in range(100):
  if x not in auxset:
    auxset.add(x)
    mylist.append(x)  # or whatever

Для кортежа невозможно что-либо добавить к нему или каким-либо иным образом изменить его: конечно, кортежи неизменны! Конечно, вы это знаете ?! Так зачем спрашивать?

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