Python - прочитать сложный файл в словарь - PullRequest
3 голосов
/ 02 мая 2011

Мой входной файл:

-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

Мне нужно создать словарь Python таким образом, чтобы ключ - это первые два столбца, а значение - это другой словарь, где ключ - это 3 + 4 столбца, а значениеэто 5-й столбец:

'-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}

До сих пор я использовал Perl-скрипт, чтобы преобразовать его в текст, который похож на то, что я показываю выше, а затем скопировать и вставить этот текст в мой код Python.(значение стало дробью, потому что я разделил его на общую сумму, которая была 56

Ответы [ 2 ]

7 голосов
/ 02 мая 2011
from collections import defaultdict

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

Если вам нужны строковые ключи, замените (a,b) на '%s %s' % (a, b) и аналогично на (c,d).

1 голос
/ 02 мая 2011

Это должно работать:

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)])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...