Как перегруппировать ключи python dict

Я работаю над программой, которая (среди прочего) читает 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,...} ).

Похоже, должно быть очевидное решение, которое намекает на меня.

EDIT: Если данные находятся в a и отображаются в b :

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

Я приближаюсь, но он будет работать только в тех случаях, когда поля, как известно, находятся в том же порядке, что и я.

3 Solutions collect form web for “Как перегруппировать ключи python dict”

 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 Comprehensions :

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

Если вы используете Python 2.7 или Python 3.x, вы можете использовать понимание словаря . Это эквивалентный ответ elo80ka (который использовал понимание списка), но дает немного более читаемый код.

 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] 

Это то, что вам нужно?

  • Сочетание двух словарей в один с теми же клавишами?
  • Сравните словари, игнорируя определенные ключи
  • переименовывать ключи в словаре
  • Могу ли я получить доступ к английскому словарю для прокрутки совпадений в морском коде? Если нет, я могу скопировать и вставить его из какого-либо места на несколько строк?
  • Матч-набор словарей. Самое элегантное решение. питон
  • сортировать значения и возвращать список ключей из dict python
  • Преобразование JSON в Python dict
  • Является ли я .__ dict __. Update (** kwargs) хорошим или плохим стилем?
  • Python - лучший язык программирования в мире.