【问题标题】:Creating a dictionary from csv file从 csv 文件创建字典
【发布时间】:2012-01-02 20:30:29
【问题描述】:

我遇到了以下问题,我有点不确定。我知道字典包含每个城镇以及它们与每个城市的距离,但它的结构是像 {Albury: 925,1440,352,3937,308,3583,565......} 还是不同的东西?

下表从网上下载并保存在文件 distances.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 中包含的数据结构。

【问题讨论】:

    标签: python csv for-loop dictionary


    【解决方案1】:

    如果你添加

    import pprint
    pprint.pprint(t)
    

    在脚本底部并执行它,你会很清楚地看到你的数据结构。它看起来像这样:

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

    但是,正如@sarnold 在他的评论中所说,因为这闻起来像家庭作业,所以我将把它留给你来解释数据结构。作为提示,您可能需要查看 DictReader 文档以了解如何创建数据。

    【讨论】:

      猜你喜欢
      • 2016-09-03
      • 2011-10-08
      • 2012-12-15
      • 2016-11-22
      • 2015-09-16
      相关资源
      最近更新 更多