Python oneliner 初始化字典

PPC*_*PPC 4 python dictionary python-3.x

我正在寻找一个简短而紧凑的单行代码来从 Python 中的列表初始化字典。是否有等效于下面的两个结构?

dic = {}
for elt in list:
  dic[elt.hash] = elt
Run Code Online (Sandbox Code Playgroud)

.

dic2 = {}
defaultValue = 0
for elt in list:
  dic2[elt] = defaultValue
Run Code Online (Sandbox Code Playgroud)

我已经看到了Counter第二种情况的使用,但它是一个非常狭窄的情况,我正在寻找通用语法。

jpp*_*jpp 5

实例化字典的三个 Pythonic 解决方案的总结。拥有“单线”解决方案永远不应成为最重要的考虑因素。

1. 预先定义的键和默认值。

不要为每个键设置默认值,而是使用dict.fromkeys. 此外,不要将变量命名为与类相同的名称,例如lst改为使用。

dic2 = dict.fromkeys(lst, 0)
Run Code Online (Sandbox Code Playgroud)

2. 预先定义的默认值,但不是键。

或者,如果您将来要添加更多键,请考虑使用collections.defaultdict,它是 的子类dict

from collections import defaultdict
dic2 = defaultdict(int)
dic2['newkey']  # returns 0 even not explicitly set
Run Code Online (Sandbox Code Playgroud)

3. 函数关联的键值。

要构建通过函数链接键和值的字典,请使用字典理解,如@OmerB 所详细描述的,例如

{k: f(k) for k in lst}  # value function of given keys
{f(v): v for v in lst}  # key function of given values
Run Code Online (Sandbox Code Playgroud)