开发者

Python - Read a complicated file into dictionary

开发者 https://www.devze.com 2023-03-02 13:42 出处:网络
My input file is: -150150-901301 -150150-1501701 -150150-1101401 -150160-80-201 -150170-1401601 -150170-70-401

My input file is:

-150     150    -90      130    1
-150     150    -150     170    1
-150     150    -110     140    1
-150     160    -80     -20     1
-150     170    -140     160    1
-150     170    -70     -40     1
-140    -170    -110     150    1
-140     130    -120     110    1
-140     140     160    -150    1
-140     160    -150     150    1
开发者_开发技巧

I need to create a python dictionary such that the key is the first two columns, and the value is another dictionary where key is 3+4 columns, and value is 5th column:

'-140 160' : {'-150 150' : 0.0188679245283019},
'-140 -170' : {'-110 150' : 0.0188679245283019},
'-150 170' : {'-140 160' : 0.0188679245283019, '-70 -40' : 0.0188679245283019},
'-150 160' : {'-80 -20' : 0.0188679245283019},
'-150 150' : {'-150 170' : 0.0188679245283019, '-110 140' : 0.0188679245283019}

So far I've been using a perl script to convert it to text that looks like what I show above, and then copy paste that text into my python code. (the value has become a fraction because I divided it by total sum, which was 56


from collections import defaultdict

bigdict = defaultdict(dict)
for ln in file:
    a,b,c,d,e = ln.split()
    bigdict[(a,b)][(c,d)] = e

If you want string keys, replace (a,b) with '%s %s' % (a, b) and similarly for (c,d).


This should work:

f = open('file')
dictionary = {}
for line in f:
    a, b, c, d, e = line.split()
    try:
        dictionary['%s %s' % (a, b)]['%s %s' % (c, d)] = e
    except KeyError:
        dictionary['%s %s' % (a, b)] = dict([('%s %s' % (c, d), e)])
0

精彩评论

暂无评论...
验证码 换一张
取 消