也許這樣的事情(假設你的CSV是製表符分隔)
import csv
import itertools
with open('users.csv') as f:
reader = csv.DictReader(f, delimiter='\t')
userdict = {}
for line in reader:
uid = int(line['User_ID'])
if uid not in userdict:
userdict[uid] = []
userdict[uid].append({k: float(v) for k,v in line.iteritems() if k != 'User_ID'})
for k, v in userdict.iteritems():
print 'User %d has been to' % k
for loc in v:
print 'lat=%f long=%f' % (loc['Latitude'], loc['Longitude'])
第一部分產生由所述用戶ID(轉換爲int鍵控dict
),值是所有用於該用戶(轉換爲浮點數)的緯度/經度對的列表。
的字典看起來像
{1: [{'Latitude': 55.75672775, 'Longitude': 37.61538506}, {'Latitude': 55.75286376, 'Longitude': 37.62190819}, {'Latitude': 47.60760975, 'Longitude': -122.334137}, {'Latitude': 40.74881754, 'Longitude': -73.99116039}], 2: [{'Latitude': 40.72046126, 'Longitude': -74.00974274}, {'Latitude': 41.56305944, 'Longitude': -70.65380573}, {'Latitude': 41.56302733, 'Longitude': -70.65389156}, {'Latitude': 41.5542606, 'Longitude': -70.60093403}, {'Latitude': 44.55035619, 'Longitude': -69.63040352}]}
其使用所創建的字典,打印所有每個用戶已經向座標的第二部分。所以,你得到的輸出喜歡
User 1 has been to
lat=55.756728 long=37.615385
lat=55.752864 long=37.621908
lat=47.607610 long=-122.334137
lat=40.748818 long=-73.991160
User 2 has been to
lat=40.720461 long=-74.009743
lat=41.563059 long=-70.653806
lat=41.563027 long=-70.653892
lat=41.554261 long=-70.600934
lat=44.550356 long=-69.630404
你可以使用的字典由具有由元組所代表的緯度,經度對可能保存。
元組版(帶defaultdict開機!)
import csv
import itertools
import collections
with open('users.csv') as f:
reader = csv.DictReader(f, delimiter='\t')
userdict = collections.defaultdict(list)
for line in reader:
userdict[int(line['User_ID'])].append((float(line['Latitude']), float(line['Longitude'])))
for k, v in userdict.iteritems():
print 'User %d has been to' % k
for loc in v:
print 'Lat=%f Long=%f' % loc
使用['csv'(https://docs.python.org/2/library/csv.html)模塊 – styvane
不要忘記標記答案是正確的,以便將來閱讀此內容的人將知道哪些內容有效! – Scironic