繁体   English   中英

用一个键值和没有对应的值在python中初始化一个字典

[英]Initializing a dictionary in python with a key value and no corresponding values

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

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

然后我可以设置它们:

Definition[key] = something

我只想初始化键,但我不知道相应的值,直到我以后必须设置它们。 基本上我知道我想在找到值时添加哪些键。 谢谢。

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

您可以将它们初始化为None

你可以使用 defaultdict。 它会让你设置字典值而不必担心键是否已经存在。 如果您访问尚未初始化的键,它将返回您指定的值(在下面的示例中,它将返回 None)

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

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

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

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

dictionary = {'one':'','two':''}
dictionary['one']=1
dictionary['two']=2
q = input("Apple")
w = input("Ball")
Definition = {'apple': q, 'ball': w}

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

# 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}

根据@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,但请考虑数据可能没有我想要的键的情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM