Инвертирующие словари в Python - PullRequest
6 голосов
/ 20 октября 2011

Я хочу знать, какой будет эффективный способ инвертировать словари в python. Я также хочу избавиться от дублирующихся значений, сравнивая ключи и выбирая большее по сравнению с меньшим, предполагая, что их можно сравнить. Вот инвертирование словаря:

inverted = dict([[v,k] for k,v in d.items()])

Ответы [ 2 ]

8 голосов
/ 20 октября 2011

Чтобы удалить дубликаты, используя самый большой ключ, сортируйте словарь по значению. При вызове dict будет использоваться последний вставленный ключ:

import operator
inverted = dict((v,k) for k,v in sorted(d.iteritems(), key=operator.itemgetter(1)))
0 голосов
/ 20 октября 2011

Вот простая и прямая реализация инвертирования словаря и сохранения большего из любых повторяющихся значений:

inverted = {}
for k, v in d.iteritems():
    if v in inverted:
        inverted[v] = max(inverted[v], k)
    else:
        inverted[v] = k  

Это можно немного увеличить с помощью dict.get () :

inverted = {}
for k, v in d.iteritems():
    inverted[v] = max(inverted.get(v, k), k)

Этот код выполняет меньше сравнений и использует меньше памяти, чем подход, использующий sorted () .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...