python - 如何使用列表中的键和Python中的空值初始化dict?

Posted

技术标签:

【中文标题】python - 如何使用列表中的键和Python中的空值初始化dict?【英文标题】:How to initialize a dict with keys from a list and empty value in Python? 【发布时间】:2011-01-15 13:27:32 【问题描述】:

我想从中得到:

keys = [1,2,3]

到这里:

1: None, 2: None, 3: None

有pythonic的方法吗?

这是一种丑陋的做法:

>>> keys = [1,2,3]
>>> dict([(1,2)])
1: 2
>>> dict(zip(keys, [None]*len(keys)))
1: None, 2: None, 3: None

【问题讨论】:

【参考方案1】:

dict.fromkeys([1, 2, 3, 4])

这实际上是一个类方法,所以它也适用于字典子类(如collections.defaultdict)。可选的第二个参数指定用于键的值(默认为 None。)

【讨论】:

小心初始化可变的东西:如果你调用,例如,dict.fromkeys([1, 2, 3], []),所有的键都映射到同一个列表,修改一个会修改它们。 使用k:[] for k in [1, 2, 3] 初始化仍然是安全的。【参考方案2】:

没人愿意提供听写理解的解决方案吗?

>>> keys = [1,2,3,5,6,7]
>>> key: None for key in keys
1: None, 2: None, 3: None, 5: None, 6: None, 7: None

【讨论】:

我相信它已被向后移植到 2.7 这很好,并且不会像接受的答案那样受到参考问题的影响。 这也允许你指定一个默认值(例如False)。 这是 Python3 IMO 中最干净、最 Pythonic 的方式 使用 dict-comp 还允许将值作为调用函数的结果(如果需要,可以将键作为参数传递)——这是一种非常强大的机制。【参考方案3】:
dict.fromkeys(keys, None)

【讨论】:

太棒了,我想要空列表,dict.fromkeys(keys, []) @muon 这几乎肯定不是你想要的,请参阅charleslparker comment。 适用于 Python 2.6.6 版。 注意:这将初始化dict,所有键都指向相同的单个值【参考方案4】:
>>> keyDict = "a","b","c","d"

>>> dict([(key, []) for key in keyDict])

输出:

'a': [], 'c': [], 'b': [], 'd': []

【讨论】:

虽然此代码可以回答问题,但提供有关 如何 和/或 为什么 解决问题的附加上下文将改善答案的长期价值。 名称keyDict 具有误导性,因为第一行代码返回set,而不是dict 它们可能会被映射到同一个列表中【参考方案5】:
d = 
for i in keys:
    d[i] = None

【讨论】:

为什么 Python 会抛出如下错误:TypeError: 'type' object is not iterable? @FrancescoCastellani 因为list 是一种类型。除非你有list = []之类的东西,否则上面的方法总是会给你同样的错误【参考方案6】:

许多工作流程中,您希望为任意键附加默认/初始值,您不需要提前单独对每个键进行哈希处理。您可以使用collections.defaultdict。例如:

from collections import defaultdict

d = defaultdict(lambda: None)

print(d[1])  # None
print(d[2])  # None
print(d[3])  # None

这更有效,它不必在实例化时散列所有密钥。此外,defaultdictdict 的子类,因此通常不需要转换回常规字典。

对于您需要对允许的键进行控制的工作流程,您可以根据接受的答案使用dict.fromkeys

d = dict.fromkeys([1, 2, 3, 4])

【讨论】:

以上是关于python - 如何使用列表中的键和Python中的空值初始化dict?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中的键和值列表上使用 Lambda 函数获取最大值和最小值?

如何与熊猫数据框中的键和键列表合并

将python字典写入CSV列:第一列的键,第二列的值

将字典的键和值并行传递给函数?

用python操作excel,如何将python中一个dict的键和值分别批量写入excel中不同列

Python 字典方法