Ответ 1
Вы можете инициализировать их до None
.
Мне было интересно, есть ли способ инициализировать словарь в python с помощью ключей, но никаких соответствующих значений до тех пор, пока я их не установлю. Например:
Definition = {'apple': , 'ball': }
а затем я могу установить их:
Definition[key] = something
Я хочу только инициализировать ключи, но я не знаю соответствующих значений, пока не буду устанавливать их позже. В основном я знаю, какие ключи я хочу добавить значения, поскольку они найдены. Спасибо.
Вы можете инициализировать их до None
.
Используйте функцию 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)
вы можете использовать defaultdict. Это позволит вам устанавливать значения словаря, не беспокоясь о том, что ключ уже существует. Если вы получите доступ к ключу, который еще не был инициализирован, он вернет указанное вами значение (в приведенном ниже примере оно будет возвращать None)
from collections import defaultdict
your_dict = defaultdict(lambda : None)
Вы можете инициализировать значения как пустые строки и заполнить их позже, когда они будут найдены.
dictionary = {'one':'','two':''}
dictionary['one']=1
dictionary['two']=2
Было бы хорошо знать, какова ваша цель, почему вы хотите инициализировать ключи в первую очередь. Я не уверен, что вам нужно это делать вообще.
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))
q = input("Apple")
w = input("Ball")
Definition = {'apple': q, 'ball': w}
На основе поясняющего комментария от пользователя @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, но рассмотрю случай, когда данные могут не иметь ключа, который я хочу.