2013-09-02 2 views
0

Я пытаюсь написать программу, которая принимает словарь, делает копию, а затем свопирует ключи для значения в копии. Однако элементы первого словаря должны исходить из другой функции. У меня есть, как поменять ключи/значения, но не так, чтобы добавить все в оригинальные словари. Есть идеи? (. TestReverse не может быть изменен только реверс может.)Настройка словаря из другой функции?

import copy 

def reverse(): 
    dict1 = 
    dict2 = dict1.copy() 
    dict2 = {y:x for x,y in dict.iteritems()} 

def testReverse(): 
    phoneBook = {'Doe, John': '123-1234', 'Parker, Mark': '987-9876'} 
    print reverse(phoneBook) 

def main(): 
    testReverse() 

main() 
+0

Пожалуйста, не забывайте отмечать ответ как принятый, если он решил вашу проблему. – elyase

ответ

4

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

def reverse(inputdict): 
    return {y:x for x,y in inputdict.iteritems()} 

Поскольку понимание dict создает полностью словарь, все это необходимо; никакая явная копия не требуется.

Демо:

>>> def reverse(inputdict): 
...  return {y: x for x, y in inputdict.iteritems()} 
... 
>>> def testReverse(): 
...  phoneBook = {'Doe, John': '123-1234', 'Parker, Mark': '987-9876'} 
...  print reverse(phoneBook) 
... 
>>> testReverse() 
{'123-1234': 'Doe, John', '987-9876': 'Parker, Mark'} 

Опять же, это делает не тронуть оригинальный словарь:

>>> testdict = {'foo': 'bar'} 
>>> reverse(testdict) 
{'bar': 'foo'} 
>>> testdict 
{'foo': 'bar'} 
+0

Это выглядит хорошо, но один вопрос: создает ли новый словарь с включенными значениями или редактирует оригинальный словарь? –

+0

@ Machinist'sGuardianArchangel: он не может касаться оригинала, потому что кроме метода 'iteritems()' мы не приближаемся к оригинальному словарю. Понятие dict ('{key: value for .....}') всегда создает полностью * новый * словарь. –

0

Вот еще один способ:

def reverse(d): 
    return {d[k]:k for k in d} 

помнить также, что значения в вашей Оригинальный словарь должен быть уникальный, иначе вы потеряете ключ & пары значений в новом словаре. Например:

>>> a = {1:-1, 2:-2, 3:-3, 4:-1} 
>>> reverse(a) 
{-2: 2, -1: 4, -3: 3} 
Смежные вопросы