首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python列表帮助(递增计数,追加)

Python列表帮助(递增计数,追加)
EN

Stack Overflow用户
提问于 2013-04-23 22:40:55
回答 5查看 1.9K关注 0票数 2

我正在尝试连接google的地理编码api和github api来解析用户的位置并创建一个列表。

我想创建的数组(list)如下所示:

代码语言:javascript
运行
复制
location, lat, lon, count
San Francisco, x, y, 4
Mumbai, x1, y1, 5

其中location、lat和lon是从Google geocode解析而来,count是该位置的出现次数。E每次添加新位置时:如果它存在于列表中,则计数递增,否则将其附加到具有location、lat、lon的数组(列表),计数应为1。

另一个例子:

代码语言:javascript
运行
复制
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中创建这个数组,这是我正在努力解决的问题。

有谁可以帮我?谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-04-23 22:57:32

使用collections.Counter,您可以执行以下操作:

代码语言:javascript
运行
复制
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})
票数 4
EN

Stack Overflow用户

发布于 2013-04-23 22:46:03

最好将其存储为按城市名称索引的字典。您可以将其存储为两个字典,一个用于纬度/经度的元组字典(因为经度/纬度从不更改):

代码语言:javascript
运行
复制
lat_long_dict = {}
lat_long_dict["San Francisco"] = (x, y)
lat_long_dict["Mumbai"] = (x1, y1)

以及计数的collections.defaultdict,因此它总是从0开始:

代码语言:javascript
运行
复制
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})
票数 2
EN

Stack Overflow用户

发布于 2013-04-23 22:50:32

Python有一个专门用于计算事件发生次数的预烘焙类:它叫做collections.Counter。如果您可以生成一个迭代器,从输入数据(可能使用生成器表达式)提供连续的元组(city, lat, lon),那么只需将其传递到Counter,就可以直接得到您想要的结果。例如,

代码语言:javascript
运行
复制
>>> 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方法中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16172268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档