我想知道是否有一种方法可以在python中用键初始化字典,但没有相应的值,直到我设置它们。如:
Definition = {'apple': , 'ball': }
然后我可以设置它们:
Definition[key] = something
我只想初始化键,但是直到以后必须设置它们时,我才知道相应的值。基本上,我知道要添加找到值的键。谢谢。
我想知道是否有一种方法可以在python中用键初始化字典,但没有相应的值,直到我设置它们。如:
Definition = {'apple': , 'ball': }
然后我可以设置它们:
Definition[key] = something
我只想初始化键,但是直到以后必须设置它们时,我才知道相应的值。基本上,我知道要添加找到值的键。谢谢。
Answers:
您可以将它们初始化为None
。
None
会导致'NoneType' object does not support item assignment
错误...
Definition[key] = something
when Definition
is None
(不是此处提倡的事情)而不是when Definition[key]
is None
(that)时,会发生这样的错误。
使用该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)如果要计算键的出现次数,可以执行以下操作:
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))
根据@ 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,但考虑数据可能没有我想要的键的情况。