Измените значение словаря на ключ словаря в python

Я хочу создать «настоящий» словарь: словарь с голландского на английский со следующими словами: def reversTranslation(dictionary):

>>> dictionary= {'tension': ['spanning'], 'voltage': ['spanning', 'voltage']}
>>> dictionary= reverseTranslation(dictionary)
>>> dictionary
{'spanning': ['tension', 'voltage'], 'voltage': ['voltage']}

Как видите, в голландском языке «spanning» имеет два разных значения. Помощь будет оценена.


person user1830011    schedule 21.11.2012    source источник
comment
Итак, вопрос...   -  person alexvassel    schedule 21.11.2012
comment
Питон валидный, в чем проблема?   -  person Chris Seymour    schedule 21.11.2012


Ответы (3)


Ну вот:

def reverseTranslation(d):
    return dict((v1,[k for k,v in d.iteritems() if v1 in v])
                for v1 in set(sum(d.values(),[])))
person Julien Vivenot    schedule 21.11.2012

Если вы спрашиваете, как получить этот результат, наиболее читаемый способ:

from collections import defaultdict

def reverse_dictionary(dictionary):
    result = defaultdict(list)
    for key, meanings in dictionary.iteritems():  #or just .items()
        for meaning in meanings:
            result[meaning].append(key)
    return result

Или вы можете сначала суммировать значения, а затем перебирать словарь.

person Bakuriu    schedule 21.11.2012

d= {'tension': ['spanning'], 'voltage': ['spanning', 'voltage'],'extra':['voltage']}
val = set(reduce(list.__add__,d.values()))

dict={}
for x in val:
    tmp={x:[]}
    for k,v in d.items():
        if x in v:
           tmp[x].append(k)
    dict.update(tmp)

print dict

Примечание: коллекции доступны только для python 2.4 и более поздних версий.

person Darknight    schedule 21.11.2012