Подтвердить что ты не робот

Инициализация словаря в python с ключом и отсутствие соответствующих значений

Мне было интересно, есть ли способ инициализировать словарь в python с помощью ключей, но никаких соответствующих значений до тех пор, пока я их не установлю. Например:

Definition = {'apple': , 'ball': }

а затем я могу установить их:

Definition[key] = something

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

4b9b3361

Ответ 1

Вы можете инициализировать их до None.

Ответ 2

Используйте функцию fromkeys для инициализации словаря любым значением по умолчанию. В вашем случае вы будете инициализироваться с помощью None, так как у вас нет значения по умолчанию.

empty_dict = dict.fromkeys(['apple','ball'])

это инициализирует empty_dict как:

empty_dict = {'apple': None, 'ball': None}

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

default_value = 'xyz'
nonempty_dict = dict.fromkeys(['apple','ball'],default_value)

Ответ 3

вы можете использовать defaultdict. Это позволит вам устанавливать значения словаря, не беспокоясь о том, что ключ уже существует. Если вы получите доступ к ключу, который еще не был инициализирован, он вернет указанное вами значение (в приведенном ниже примере оно будет возвращать None)

from collections import defaultdict
your_dict = defaultdict(lambda : None)

Ответ 4

Вы можете инициализировать значения как пустые строки и заполнить их позже, когда они будут найдены.

dictionary = {'one':'','two':''}
dictionary['one']=1
dictionary['two']=2

Ответ 5

Было бы хорошо знать, какова ваша цель, почему вы хотите инициализировать ключи в первую очередь. Я не уверен, что вам нужно это делать вообще.

1) Если вы хотите подсчитать количество вхождений ключей, вы можете просто:

Definition = {}
# ...
Definition[key] = Definition.get(key, 0) + 1

2) Если вы хотите получить None (или какое-то другое значение) позже для ключей, с которыми вы не столкнулись, снова вы можете просто использовать метод get():

Definition.get(key)  # returns None if key not stored
Definition.get(key, default_other_than_none)

3) Для всех других целей вы можете просто использовать список ожидаемых ключей и проверить, соответствуют ли найденные ключи позже.

Например, если вы хотите сохранить значения для этих ключей:

expected_keys = ['apple', 'banana']
# ...
if key_found in expected_keys:
    Definition[key_found] = value

Или если вы хотите убедиться, что все ожидаемые ключи были найдены:

assert(all(key in Definition for key in expected_keys))

Ответ 6

q = input("Apple")
w = input("Ball")
Definition = {'apple': q, 'ball': w}

Ответ 7

На основе поясняющего комментария от пользователя @user2989027, я считаю, что хорошим решением является следующее:

definition = ['apple', 'ball']
data = {'orange':1, 'pear':2, 'apple':3, 'ball':4}
my_data = {}
for k in definition:
  try:
    my_data[k]=data[k]
  except KeyError:
    pass
print my_data

Я старался не делать ничего интересного здесь. Я устанавливаю свои данные и пустой словарь. Затем я просматриваю список строк, которые представляют потенциальные ключи в моем словаре данных. Я копирую каждое значение из данных в my_data, но рассмотрю случай, когда данные могут не иметь ключа, который я хочу.