我正在尝试连接google的地理编码api和github api来解析用户的位置并创建一个列表。
我想创建的数组(list)如下所示:
location, lat, lon, count
San Francisco, x, y, 4
Mumbai, x1, y1, 5其中location、lat和lon是从Google geocode解析而来,count是该位置的出现次数。E每次添加新位置时:如果它存在于列表中,则计数递增,否则将其附加到具有location、lat、lon的数组(列表),计数应为1。
另一个例子:
location, lat, lon, count
Miami x2, y2, 1 #first occurrence
San Francisco, x, y, 4 #occurred 4 times already
Mumbai, x1, y1, 5 #occurred 5 times already
Cairo, x3, y3, 1 #first occurrence我已经可以从github获取用户的位置,也可以从google获取地理编码数据。我只需要在python中创建这个数组,这是我正在努力解决的问题。
有谁可以帮我?谢谢。
发布于 2013-04-23 22:57:32
使用collections.Counter,您可以执行以下操作:
from collections import Counter
# initial values
c=Counter({("Mumbai", 1, 2):5, ("San Francisco", 3,4): 4})
#adding entries
c.update([('Mumbai', 1, 2)])
print c # Counter({('Mumbai', 1, 2): 6, ('San Francisco', 3, 4): 4})
c.update([('Mumbai', 1, 2), ("San Diego", 5,6)])
print c #Counter({('Mumbai', 1, 2): 7, ('San Francisco', 3, 4): 4, ('San Diego', 5, 6): 1})发布于 2013-04-23 22:46:03
最好将其存储为按城市名称索引的字典。您可以将其存储为两个字典,一个用于纬度/经度的元组字典(因为经度/纬度从不更改):
lat_long_dict = {}
lat_long_dict["San Francisco"] = (x, y)
lat_long_dict["Mumbai"] = (x1, y1)以及计数的collections.defaultdict,因此它总是从0开始:
import collections
city_counts = collections.defaultdict(int)
city_counts["San Francisco"] += 1
city_counts["Mumbai"] += 1
city_counts["San Francisco"] += 1
# city counts would be
# defaultdict(<type 'int'>, {'San Francisco': 2, 'Mumbai': 1})发布于 2013-04-23 22:50:32
Python有一个专门用于计算事件发生次数的预烘焙类:它叫做collections.Counter。如果您可以生成一个迭代器,从输入数据(可能使用生成器表达式)提供连续的元组(city, lat, lon),那么只需将其传递到Counter,就可以直接得到您想要的结果。例如,
>>> locations = [('Miami', 1, 1), ('San Francisco', 2, 2), ('Mumbai', 3, 3), ('Miami', 1, 1), ('Miami', 1, 1)]
>>> Counter(locations)
Counter({('Miami', 1, 1): 3, ('San Francisco', 2, 2): 1, ('Mumbai', 3, 3): 1})如果您需要在程序运行时添加更多位置,而不是对它们进行批处理,请将相关的元组放入该计数器的update方法中。
https://stackoverflow.com/questions/16172268
复制相似问题