2015-03-31 77 views
0

我試圖循環槽python中的csv。數據是交通攝像頭的位置,看起來像這樣。Python:重新組織數據並將其添加到字典

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。

回答

0

您可以使用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) 
+0

美麗而優雅,謝謝! – 2015-03-31 20:15:17

+0

@MartinHedström,沒問題,不客氣。如果順序很重要,您可以使用'collections.OrderedDict'而不是'dict.setdefault' – 2015-03-31 20:16:44

0

Python擁有csv模塊,它甚至包含DictReader對象,它可以爲您完成所有這些工作。

+0

它不會產生由OP所需的列表。 – 2015-03-31 19:59:02

+0

@MartijnPieters:true,但是OP明確要求只向正確的方向推送。這就是我的答案:) – 2015-03-31 20:00:20

+1

雖然我看不出真正的幫助。 'csv.reader()'會更好。 – 2015-03-31 20:01:09