Python - change all specific values in a dictionary
<p>I have some problem with constructing a phonebook, I have a function that adds names and number, a function that makes an alias for the person (two numbers have two diffrent names). And a change function which im having problems with. I want the function to change the number for one person and all its aliases. My code looks like this:</p>

<pre><code>class Phonebook: #vi skapar en klass

    def __init__(self): #fÃ¶r att initiera scriptet (constructor)
        self.pb={} #dictionary

    def add(self,namn,nummer):
        if namn in self.pb:
            print "Name already in contacts!" #kolla om namnet finns
        elif nummer in self.pb.viewvalues(): #kolla om numret finns
            print "Number already exists for a contact!"
        else:
            self.pb[namn]=nummer #lÃ¤gga till namn med tel.nr

    def lookup(self,namn):
        if namn in self.pb:
            print
            print self.pb[namn] #skriver ut numret till namnet
            print
        else:
            print "Name is not in contacts"
            print 

    def alias(self,namn,nummer):
        self.pb[nummer]=self.pb[namn] #tvÃ¥ namn fÃ¥r samma nummer

    def change(self,namn,nummer):
        if namn in self.pb:
            for godtyckligt in self.pb:
                if self.pb[namn]==self.pb[godtyckligt]:
                    self.pb[godtyckligt]=nummer
</code></pre>

<p>What can I change in my change function and/or in my alias function? Thanks.</p>

<p>If I understood you correctly you need to replace old number for some name, then add the new number as an alias, set it to the name and then remove the old number as alias:</p>

<pre><code>def change(self,namn,nummer):
    old_number = '' 
    if namn in self.pb:
        for godtyckligt in self.pb:
            if self.pb[namn]==self.pb[godtyckligt]:
                old_nummer = self.pb[godtyckligt]
                self.pb[godtyckligt]=nummer
                self.pb[nummer]=godtyckligt    
                del self.pb.pop(old_nummer)
</code></pre>

<p>Your <code>alias</code> method should be like this:</p>

<pre><code>#You need to define another dict aliases
#aliases = {}

def alias(self, name0, name1):
    self.aliases[name0].append(name1)
</code></pre>

<p>And then change the <code>lookup</code> method:</p>

<pre><code>def lookup(self,namn):
    if namn in self.pb:
        print
        print self.pb[namn] #skriver ut numret till namnet
        print
        return

    else:
        for name in aliases:
            if namn in aliases[name]:
                print
                print self.pb[namn] #skriver ut numret till namnet
                print
                return

    print "Name is not in contacts"
    print     
    return
</code></pre>

python dictionary value