也许这样的事情(假设你的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