¿Cómo puedo volver a mapear las claves de dictado de Python?

Estoy trabajando en un progtwig que (entre otras cosas) lee un archivo CSV (se almacena como una matriz de dicts en la forma [{col1:data1a,col2:data2a},{col1:data1b,col2:data2b}] ). Para cada fila, como parte de otro procesamiento, necesito volver a asignar esas claves a los valores ingresados ​​por el usuario, que se proporcionan en otro dictado para que puedan usarse como parámetros en una llamada a la API. La matriz de mapeo está en la forma: {badname1:goodname1, badname2:goodname2,...} .

Así que me gustaría pasar de: {badname1:data1, badname2:data2,...} a {goodname1:data1, goodname2:data2,...}

Me gustaría usar algo como zip() (aunque zip() produce {badname1:badname1,...} ).

Parece que debería haber una solución obvia que me alude.

EDITAR: Si los datos están en a y la asignación en b :

dict(zip(b,a.itervalues()))

Me acerco, pero solo funcionará en los casos en que se sabe que los campos están en el mismo orden que creo.

 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()) ... 

O en Python2.7 + con Comprensiones de Dict :

 for row in rows: row = {name_map[name]: val for name, val in row.items()} 

Si está utilizando Python 2.7 o Python 3.x, puede usar un diccionario de comprensión . Esta es una respuesta equivalente de elo80ka (que usó una lista de comprensión), pero produce un código un poco más legible.

 name_map = {'oldcol1': 'newcol1', 'oldcol2': 'newcol2', 'oldcol3': 'newcol3'...} for row in rows: # Each row is a dict of the form: {'oldcol1': '...', 'oldcol2': '...'} row = {name_map[name]: val for name, val in row.iteritems()} ... 
 rows = [{"col1":"data1a","col2":"data2a"},{"col1":"data1b","col2":"data2b"}] name_map = {"col1":"newcol1","col2":"newcol2"} new_rows = [dict(zip(map(lambda x: name_map[x], r.keys()), r.values())) for r in rows] 

¿Es esto lo que buscas?