在Python中,哪种类型的数据结构可以实现快速搜索并且效率最高?

时间:2014-02-02 06:44:07

标签: python data-structures

我有一个文本文件,其中列出了10,000,000个YouTube视频ID,如下所示:

9bZkp7q19f0
t4H_Zoh7G5A
9bZkp7q19f0
etc...

我打开文件,获取YouTube视频ID,然后查看它的统计信息: https://www.googleapis.com/youtube/v3/videos?part=topicDetails,statistics&id=9bZkp7q19f0&key= {API_KEY}对于第一个视频(Psy Gangnam Style),API调用返回:

  "viewCount": "1895378471",
  "likeCount": "8110831",
  "dislikeCount": "976065",
  "favoriteCount": "0",
  "commentCount": "5100187"

我还会计算自定义值,例如每个视频包含在文件中的次数,每次递增一次。

我需要将所有这些信息记录到某种类型的Python数据结构中,如下所示:

videoID    ,  viewCount, count, etc
9bZkp7q19f0, 1895378471, 10000
t4H_Zoh7G5A,  512345678, 10000

由于videoID经常在输入文件中重复,我不只是将新行添加到数据结构中,而是需要能够找到现有的行,并增加count的值。

我认为像“videoID”,“count”等文本实际上并不一定要在数据结构中,二维类型的数组很好,只要我知道每列代表什么。

这个问题的关键是我正在试图决定哪种类型的数据结构最好。表现至关重要。

我必须能够通过videoID快速确定密钥,如果该行已存在于数据结构中,那么如果我可以索引第一列,那将是理想的。

什么类型的Python数据结构可以实现这一目标?

2 个答案:

答案 0 :(得分:4)

使用videoID作为键,在dict中存储viewCount和timesPreferred的元组。更新每个条目将在固定时间内运行。

对于额外的数据,请等到您在获取数据之前将数据放入数据库。在你计算的时候,它没有任何意义。

答案 1 :(得分:0)

字典列表应该没问题。但是,我会使用cpickle(一种更快的pickle版本)将字典列表存储在“pickle”文件中,以获得最佳性能。

http://docs.python.org/2/library/pickle.html#pickle-example