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

时间:2012-10-03 00:22:52

标签: python dictionary python-3.x

对于writerow的{​​{1}},我需要填充(部分)字典为空。我发现没有立即解决方案。有吗?

一样
csv.DictWriter

伪代码

fieldnames = ['first','last']

结果

row = fieldnames.fill(None)

那样

print(row)
['first':None,'last':None]

结果

destination.writerow(row)

3 个答案:

答案 0 :(得分:6)

对于内置的dict方法fromkeys来说,这是很自然的:

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

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

答案 1 :(得分:4)

这可以通过简单的dictionary comprehension

来实现
{key: None for key in keys}

E.g:

>>> keys = ["first", "last"]
>>> {key: None for key in keys}
{'last': None, 'first': None}

修改:看起来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

答案 2 :(得分:0)

这样的东西?

>>> fieldnames = ['first', 'last']
>>> row = dict((h, None) for h in fieldnames)
>>> row
{'last': None, 'first': None}
>>>