2016-09-15 120 views
1

我正在使用一个基本的CSV文件描述四个城市以及它们之间的距离。因此,目标是从所述文件中检索信息,并使用Python进行进一步的操作。读取CSV文件并确定数据结构

Excel文件

该文件是建立在Excel如下:

cities.csv file

CSV文件

当作为CSV导出,该文件表示如下:

,OSL,CPH,LDN,TKO 
OSL,0,2,4,10 
CPH,2,0,2,9 
LDN,4,2,0,12 
TKO,10,9,12,0 

获取城市

显然,第一行包含所有城市,以及第一个空白单元格。我已经做了以下检索城市,不包括空白单元格:

def get_cities(file): 
    reader = csv.reader(file) 

    cities = [] 

    row1 = next(reader) 
    cities.extend(row1[1:]) #exclude first cell (blank) 
    print cities 

产量:

['OSL', 'CPH', 'LDN', 'TKO'] 

映射城市和他们

之间的距离已经这样做了,我现在可以阅读文件的其余部分,以便检索城市之间的距离。

但是,我发现很难想出一个很好的方式来表示这种信息作为一种数据结构。理想情况下,我希望能够检查任何两个城市之间的距离。

任何有关如何执行此操作的建议,将不胜感激。

也就是,如何才能最好地代表此信息以便于远距离查找?

+1

难道你不考虑使用熊猫吗?里面有DataFrame。 –

+0

我会用这样的词典:'my_data = {'cities':['OSL','CPH',...],'OSL':[0,2,4,10],'CPH': [2,0,2,9],...}。正如@AntonGlukhov所说,熊猫可以轻松地为你做到这一点,但你也可以。 –

+0

请看看pandas.DataFrame.from_csv classmethod。 –

回答

1

它看起来好像你的数据直接代表了一个图的邻接矩阵。将它作为一个邻接矩阵存储,并且只为(距离城市1,城市2)做简单的查找。你可以在城市列举实施。

+0

在SO中搜索邻接矩阵,看起来最常用的方法是将此信息存储为2D数组?如果是这样,我会尝试。 提到“列举城市”时;这究竟是什么?例如,OSL = 1,CPH = 2等? – northerner

+0

是相同的,将其存储为二维数组并用于查找使用这些枚举 – armak

0

使用字典的字典。这不是非常有效的内存,但是使用内置python容器的最简单的解决方案。

map = {'OSL' : 
     { 
      'OSL' : 0, 
      'CPH' : 2, 
      ... 
     }, 
    'CPH' : 
     { 
      ... 
     }, 
    ... 
    } 

然后,您可以像map ['OSL'] ['CPH']一样查找距离。