如何在Python 3.3中为所有键(在列表中给出)填充无字典

Lás*_*zló 2 python dictionary python-3.x

对于writerowcsv.DictWriter,我需要填写字典(的一部分)是空的.我发现没有立即解决方案.有吗?

喜欢

fieldnames = ['first','last']
Run Code Online (Sandbox Code Playgroud)

伪代码

row = fieldnames.fill(None)
Run Code Online (Sandbox Code Playgroud)

结果

print(row)
['first':None,'last':None]
Run Code Online (Sandbox Code Playgroud)

以便

destination.writerow(row)
Run Code Online (Sandbox Code Playgroud)

结果是

,
Run Code Online (Sandbox Code Playgroud)

小智 7

这的确是一个自然的内置字典方法fromkeys:

>>> dict.fromkeys('abcd',None)
{'a': None, 'c': None, 'b': None, 'd': None}
>>> dict.fromkeys(['first','last'],None)
{'last': None, 'first': None}
Run Code Online (Sandbox Code Playgroud)

根本不需要词典理解(2.7+)或列表理解.


Gar*_*tty 5

这可以通过一个简单的字典理解来实现:

{key: None for key in keys}
Run Code Online (Sandbox Code Playgroud)

例如:

>>> keys = ["first", "last"]
>>> {key: None for key in keys}
{'last': None, 'first': None}
Run Code Online (Sandbox Code Playgroud)

编辑:看起来dict.fromkeys()是最佳解决方案:

python -m timeit -s "keys = list(range(1000))" "{key: None for key in keys}"
10000 loops, best of 3: 59.4 usec per loop
python -m timeit -s "keys = list(range(1000))" "dict.fromkeys(keys)"
10000 loops, best of 3: 32.1 usec per loop
Run Code Online (Sandbox Code Playgroud)