Создание словаря из CSV-файла - PullRequest
0 голосов
/ 21 ноября 2011

Мне дали следующую проблему, и я немного неуверен.Я понимаю, что словарь содержит каждый город и их расстояние от каждого города, но структурирован ли он как {Albury: 925,1440,352,3937,308,3583,565......} или как-то иначе?

Следующая таблица была загружена из Интернета и сохранена на расстоянии файла.csv.В нем указаны расстояния для дорог, измеряемые в километрах, между крупными городами (например, Олбери) и столицами (например, Аделаида).

Town,Adelaide,Brisbane,Canberra,Darwin,Melbourne,Perth,Sydney
Albury,925,1440,352,3937,308,3583,565
Alice Springs,1544,2998,2658,1503,2255,3549,2931
Ballarat,618,1743,777,3645,112,3309,973
Bendigo,639,1619,653,3671,147,3335,849
Broken Hill,515,1545,1108,3128,825,2824,1154
Broome,4269,4646,4975,1880,4996,2233,5112
Cairns,3384,1699,2954,2885,3055,6050,2685
...

Рассмотрим следующий код, который загружает данные изэтот файл.

from csv import DictReader
def p(f):
    a = {}
    for row in DictReader(open(f)):
        x = row["Town"]
        b = {}
        for k in row:
            if k != "Town":
                 b[k] = int(row[k])
        a[x] = b
    return a

t = p("distances.csv")

Вкратце объясним, в 20-30 словах, структуру данных, содержащуюся в переменной t после выполнения кода.

1 Ответ

1 голос
/ 23 ноября 2011

Если вы добавите

import pprint
pprint.pprint(t)

внизу скрипта и выполните его, вы увидите свою структуру данных довольно четко.Это будет выглядеть примерно так:

{'Albury': {'Adelaide': 925,
            'Brisbane': 1440,
            (...)
            'Sydney': 565},
 'Alice Springs': {'Adelaide': 1544,
                   (...)

Но, как сказал @sarnold в своем комментарии, поскольку это пахнет домашней работой, я оставлю вам объяснение структуры данных.В качестве подсказки вы можете обратиться к документации DictReader о том, как создаются данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...