我正在开发一个程序,其中(除其他外)读取CSV文件(它被存储为表单中的dicts数组[{col1:data1a,col2:data2a},{col1:data1b,col2:data2b}]
).对于每一行,作为其他处理的一部分,我需要将这些键重新映射到用户输入的值,这些值在另一个dict中提供,因此它们可以用作API调用中的参数.映射数组的形式如下: {badname1:goodname1, badname2:goodname2,...}
.
所以我想从:
{badname1:data1, badname2:data2,...}
到{goodname1:data1, goodname2:data2,...}
我想使用类似的东西zip()
(虽然zip()
收益率{badname1:badname1,...}
).
似乎应该有一个明显的解决方案,暗指我.
编辑:如果数据在a
和映射b
:
dict(zip(b,a.itervalues()))
我接近了,但它只适用于已知字段与我认为的顺序相同的情况.
name_map = {'oldcol1': 'newcol1', 'oldcol2': 'newcol2', 'oldcol3': 'newcol3'...} for row in rows: # Each row is a dict of the form: {'oldcol1': '...', 'oldcol2': '...'} row = dict((name_map[name], val) for name, val in row.iteritems()) ...
或者在Python2.7 +中使用Dict理解:
for row in rows: row = {name_map[name]: val for name, val in row.items()}