Justin Carrey
Justin Carrey

Reputation: 3851

manipulating two values of a key in dictionary at the same time

i am reading a file which is in the format below:

0.012281001     00:1c:c4:c2:1f:fe       1    30
0.012285001     00:1c:c4:c2:1f:fe       3    40
0.012288001     00:1c:c4:c2:1f:fe       2    50
0.012292001     00:1c:c4:c2:1f:fe       4    60
0.012295001     24:1c:c4:c2:2f:ce       5    70  

I intend to make column 2 entities as keys and columns 3 and 4 as separate values. For each line I encounter, for that particular key, their respective values must add up (value 1 and value 2 should aggregate separately for that key). In the above example mentioned, I need to get the output like this:

'00:1c:c4:c2:1f:fe': 10 : 180, '24:1c:c4:c2:2f:ce': 5 : 70  

The program i have written for simple 1 key 1 value is as below:

#!/usr/bin/python

import collections
result = collections.defaultdict(int)
clienthash = dict()

with open("luawrite", "r") as f:
    for line in f:
            hashes = line.split()
            ckey = hashes[1]
            val1 = float(hashes[2])
            result[ckey] += val1
    print result  

How can I extend this for 2 values and how can I print them as the output mentioned above. I am not getting any ideas. Please help! BTW i am using python2.6

Upvotes: 1

Views: 96

Answers (1)

John Lyon
John Lyon

Reputation: 11420

You can store all of the values in a single dictionary, using a tuple as the stored value:

with open("luawrite", "r") as f:
    for line in f:
        hashes = line.split()
        ckey = hashes[1]
        val1 = int(hashes[2])
        val2 = int(hashes[3])
        a,b = result[ckey] 
        result[ckey] = (a+val1, b+val2) 
print result  

Upvotes: 2

Related Questions