Python обратный / инвертировать отображение

С учетом словаря, подобного так:

my_map = { 'a': 1, 'b':2 }

Как можно инвертировать эту карту, чтобы получить:

inv_map = { 1: 'a', 2: 'b' }
553
задан Mark Amery 15 July 2019 в 02:57
поделиться

4 ответа

Для Python 2.7.x

inv_map = {v: k for k, v in my_map.iteritems()}

для Python 3 +:

inv_map = {v: k for k, v in my_map.items()}
810
ответ дан Dave Lasley 2 October 2019 в 01:33
поделиться

Если значения в my_map не уникальны:

inv_map = {}
for k, v in my_map.iteritems():
    inv_map[v] = inv_map.get(v, [])
    inv_map[v].append(k)
118
ответ дан Rick Teachey 2 October 2019 в 01:33
поделиться
  • 1
    Спасибо. Лично, я don' t как эта путаница подчеркивания;) – Thanks 9 May 2009 в 03:13

Предположение, что значения в dict уникальны:

dict((v, k) for k, v in my_map.iteritems())
165
ответ дан Rick Teachey 2 October 2019 в 01:33
поделиться
  • 1
    Мой (ограниченный) опыт: Если Вы разделяете один на подклассы из Apple' s классы, и добавляют переменную экземпляра, которая сталкивается с одним из superclass' частный ivars, XCode обычно предупреждает Вас (независимо от присутствия подчеркивания). Я утверждал, что код отформатировал этот путь (т.е. ivars запускаются с подчеркивания), и не были отклонены до сих пор. – Nicolas Miari 30 January 2012 в 17:55

Попробуйте это:

inv_map = dict(zip(my_map.values(), my_map.keys()))

(Отмечают, что документы Python о представлениях словаря явно гарантия, которые .keys() и .values() имеют их элементы в том же порядке, который позволяет подходу выше работать.)

, Кроме того:

inv_map = dict((my_map[k], k) for k in my_map)

или Python использования 3.0's dict понимания

inv_map = {my_map[k] : k for k in my_map}
32
ответ дан Rick Teachey 2 October 2019 в 01:33
поделиться
  • 1
    Я просто потратил возрасты, разыскивающие проблему управления памятью из-за переменной, не сохраняемой, так как я использовал таймер вместо self.timer. После этого опыта я настоятельно рекомендую использование _ перед всеми частными переменными – Casebash 4 February 2010 в 10:29
Другие вопросы по тегам:

Похожие вопросы: