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

use*_*027 57 python dictionary initialization key

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

Definition = {'apple': , 'ball': }
Run Code Online (Sandbox Code Playgroud)

然后我可以设置它们:

Definition[key] = something
Run Code Online (Sandbox Code Playgroud)

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

cod*_*eek 75

使用该fromkeys函数初始化具有任何默认值的字典.在您的情况下,您将初始化,None因为您没有考虑默认值.

empty_dict = dict.fromkeys(['apple','ball'])
Run Code Online (Sandbox Code Playgroud)

这将初始化empty_dict为:

empty_dict = {'apple': None, 'ball': None}
Run Code Online (Sandbox Code Playgroud)

作为替代方案,如果您想要使用除以外的某个默认值初始化字典None,您可以执行以下操作:

default_value = 'xyz'
nonempty_dict = dict.fromkeys(['apple','ball'],default_value)
Run Code Online (Sandbox Code Playgroud)

  • 使用dict.fromkeys(...,default_value)时,请确保default_value不是需要构造函数(如列表)的类型,否则您将获得对所有存储桶中相同对象的引用. (4认同)

Sco*_*ter 56

你可以将它们初始化为None.

  • 或者,如果没有一个是为一个或一个以上的键值元组的一个合法的值,可以使用类似"SENTINEL =对象()",并使用Sentinel为您的标记值,以测试"是",而不是"==". (4认同)

Ham*_*mer 8

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

from collections import defaultdict
your_dict = defaultdict(lambda : None)
Run Code Online (Sandbox Code Playgroud)


小智 7

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

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

Definition = {}
# ...
Definition[key] = Definition.get(key, 0) + 1
Run Code Online (Sandbox Code Playgroud)

2)如果你想稍后获得没有遇到的密钥的无(或其他值),你可以再次使用get()方法:

Definition.get(key)  # returns None if key not stored
Definition.get(key, default_other_than_none)
Run Code Online (Sandbox Code Playgroud)

3)出于所有其他目的,您可以使用预期密钥列表,并检查以后找到的密钥是否与之匹配.

例如,如果您只想存储这些键的值:

expected_keys = ['apple', 'banana']
# ...
if key_found in expected_keys:
    Definition[key_found] = value
Run Code Online (Sandbox Code Playgroud)

或者,如果您想确保找到所有预期的密钥:

assert(all(key in Definition for key in expected_keys))
Run Code Online (Sandbox Code Playgroud)


abi*_*sis 6

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

# 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}
Run Code Online (Sandbox Code Playgroud)


小智 5

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

dictionary = {'one':'','two':''}
dictionary['one']=1
dictionary['two']=2
Run Code Online (Sandbox Code Playgroud)