在python中使用键值初始化字典,没有相应的值

时间:2013-11-19 18:53:26

标签: python dictionary initialization key

我想知道是否有办法在python中使用键初始化字典但没有相应的值,直到我设置它们。如:

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

然后我可以设置它们:

Definition[key] = something

我只想初始化键,但我不知道相应的值,直到我必须稍后设置它们。基本上我知道我想要添加值的键是什么。感谢。

8 个答案:

答案 0 :(得分:68)

使用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)

答案 1 :(得分:53)

您可以将它们初始化为None

答案 2 :(得分:8)

你可以使用defaultdict。它将允许您设置字典值,而无需担心密钥是否已存在。如果您访问尚未初始化的密钥,它将返回您指定的值(在下面的示例中,它将返回None)

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

答案 3 :(得分:6)

最好知道你的目的是什么,为什么你想首先初始化密钥。我不确定你是否需要这样做。

1)如果要计算键的出现次数,可以这样做:

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

2)如果你想稍后获得你没有遇到过的密钥的无(或其他一些值),你可以再次使用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))

答案 4 :(得分:4)

您可以将值初始化为空字符串,并在以后找到它们时将其填充。

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

答案 5 :(得分:2)

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

答案 6 :(得分:1)

在这种情况下,理解也很方便:

# from a list
keys = ["k1", "k2"]
d = {k:None for k in keys}

# or from another dict
d1 = {"k1" : 1, "k2" : 2}
d2 = {k:None for k in d1.keys()}

d2
# {'k1': None, 'k2': None}

答案 7 :(得分:0)

基于@ 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,但考虑数据可能没有我想要的密钥的情况。