[Tutor] Merging dictionaries

Norman Khine norman at khine.net
Wed Aug 6 21:59:40 CEST 2008


Hello,
I am trying to figure out the best way to add results from a poll module that I
have working, but am a bit stuck and can't see on how to add the total responses
submitted by the user.

So far I have an output which puts in a list all the user's responses, such as

responses = [{'a1': [1], 'a2': [1, 2, 3]}, {'a1': [0], 'a2': [0, 1, 3]} .... ]

Is this an efficient way to do this, say for example I have 1000's of responses?

What is the best way to append value items of dictionaries, such that:

responses = [{'a1': [1], 'a2': [1, 2, 3]}, {'a1': [0], 'a2': [0, 1, 3]}]

is transformmed into:

answered = {'a1': [0, 1], 'a2': [1, 2, 3, 0, 1, 3]}

I have tried this:

Type "help", "copyright", "credits" or "license" for more information.
>>> ret = {}
>>> myvalues = []
>>> responses = [{'a1': [1], 'a2': [1, 2, 3]}, {'a1': [0], 'a2': [0, 1, 3]}]
>>> for response in responses:
        mykeys = []
        for answer in response.items():
                mykeys.append(answer[0])
                for key in mykeys:
                        if not ret.has_key(key):
                                ret[key] = []
                        else:
                                ret[key].append(answer[1])

>>> print ret
{'a1': [[1, 2, 3], [0], [0, 1, 3]], 'a2': [[0, 1, 3]]}

But is not correct ;'(

And finally, what is the simplest way to count the nummber of occurances, so
that:

answered = {'a1': [0, 1], 'a2': [1, 2, 3, 0, 1, 3]}

returns

totals = {'a1': [{0: 1, 1: 1}], 'a2': [{0: 1, 1: 2, 2: 1, 3: 2}]}


I tried this:

    ret = {'a1': [[1, 2, 3], [0], [0, 1, 3]], 'a2': [[0, 1, 3]]}
    storage = {}
    for code in ret:
         for answer, x in questions.items():
              for x in x:
                   if not storage.has_key(x):
                            storage[x] = {'count': 1}
                   else:
                            storage[x]['count'] += 1
    print storage

But this did not work either.

Cheers

Norman


More information about the Tutor mailing list