【问题标题】:Python: reorganize data and add it to dictionaryPython:重组数据并将其添加到字典中
【发布时间】:2015-03-31 19:55:53
【问题描述】:

我正在尝试通过 python 中的 csv 循环。数据是交通摄像头的位置,看起来像这样。

id,lat,lon
2001,xxx,xxx
2001,xxx,xxx
2001,xxx,xxx
2002,xxx,xxx
2002,xxx,xxx
2002,xxx,xxx

我想提取属于每个 id 编号的坐标并将它们放在一个新列表中,一个对应于字典中的每个 id 的列表。

{21008:["61.693041701246464,17.07523578189965","61.69143482820877,17.075789632658555","61.680418586326795,17.07858434001964","61.6742753006184,17.077453196013725"]}

我对此很陌生。完成这项工作的最佳方法是什么?我不是要求一个完整的解决方案,但朝着正确的方向推进会很好。我正在使用 Python 2.7。

【问题讨论】:

    标签: python list loops dictionary


    【解决方案1】:

    您可以将collections.defaultdictcsv.reader 一起使用:

    from collections import defaultdict
    d = defaultdict(list)
    import  csv
    with open(infile) as f:
        # skip header
        next(f)
        # use reader to get all rows
        r = csv.reader(f)
        # unpack from each row
        for _id, lt, ln in r:
            # use _id as key and append lat and lon
            d[_id].append("{},{}".format(lt,ln))
    print(d)
    

    或者没有 csv 模块:

    d = defaultdict(list)
    import csv
    with open("in.txt") as f:
        next(f)
        for line in f:
            _id, lt_lon = line.split(",", 1)
            d[_id].append(lt_lon.rstrip())
    print(d)
    

    【讨论】:

    • @MartinHedström,没有问题,不客气。如果订单很重要,您可以使用collections.OrderedDict 代替dict.setdefault
    【解决方案2】:

    Python 有 csv 模块,它甚至还有 DictReader 对象,可以为您完成所有这些工作。

    【讨论】:

    • 它不会创建 OP 所需的列表。
    • @MartijnPieters:是的,但 OP 明确要求只向正确的方向推进。这就是我的回答所做的:)
    • 我看不出它实际上有什么帮助。 csv.reader() 会更好。
    猜你喜欢
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    相关资源
    最近更新 更多