Tom*_*ner 1 python performance data-structures
有什么人会考虑使用Python合并两个数据集的最有效方法?
一点背景 - 此代码将采用以下格式的100K +记录:
{user: aUser, transaction: UsersTransactionNumber}, ...
Run Code Online (Sandbox Code Playgroud)
并使用以下数据
{transaction: aTransactionNumber, activationNumber: assoiciatedActivationNumber}, ...
Run Code Online (Sandbox Code Playgroud)
创造
{user: aUser, activationNumber: assoiciatedActivationNumber}, ...
Run Code Online (Sandbox Code Playgroud)
注意:这些不是Python词典,只是最接近干净地描绘记录格式的东西.
所以从理论上讲,我所要做的就是创建一个两个列表(或表)加入一个公共密钥的视图 - 首先这指向集合(工会等),但在我开始深入学习这些之前,是不是要走的路?到目前为止,我觉得这可以实现为:
创建一个字典列表并迭代列表,每次比较密钥,但是,最坏的情况可能会运行到len(inputDict)*len(outputDict)< - 不确定?
将数据作为内存中的SQLite表进行操作?虽然对Python 2.4没有严格要求,但它可以让生活更轻松.
某种基于Set的魔法?
澄清
该脚本的总体目的是总结,实际数据集来自两个不同的来源.用户和交易号以CSV的形式出现,作为测试电子邮件激活码吞吐量的性能测试的输出.第二个数据集来自解析测试邮箱,其中包含事务ID和激活码.然后,此测试的输出将是一个CSV,它将被泵回到性能测试的第2阶段,使用配对的激活码激活用户帐户.
如果我的记录符号具有误导性,我会道歉,我已相应地更新了它们.
感谢您的回复,我将尝试两个想法:
性能对我来说并不是最重要的,我只想尝试用Python编程养成良好的习惯.
这是一个激进的方法.
别.
你有两个CSV文件; 一个(用户)显然是驱动程序.别这一点.另一个 - 用户的交易代码 - 可以变成一个简单的字典.
除非绝对必要,否则不要"合并"或"加入"任何东西.当然不要"合并"或"预先加入".
编写应用程序只需在其他集合中进行简单查找即可.
创建一个字典列表并迭代列表,每次比较密钥,
关.看起来像这样.注意:没有排序.
import csv
with open('activations.csv','rb') as act_data:
rdr= csv.DictReader( act_data)
activations = dict( (row['user'],row) for row in rdr )
with open('users.csv','rb') as user_data:
rdr= csv.DictReader( user_data )
with open( 'users_2.csv','wb') as updated_data:
wtr= csv.DictWriter( updated_data, ['some','list','of','columns'])
for user in rdr:
user['some_field']= activations[user['user_id_column']]['some_field']
wtr.writerow( user )
Run Code Online (Sandbox Code Playgroud)
这很快速而且简单.保存词典(使用shelve或pickle).
然而,最糟糕的情况是这可能会运行到len(inputDict)*len(outputDict)< - 不确定?
假.
一个列表是"驾驶"列表.另一个是查找列表.您将通过迭代用户并查找适当的事务值来开车.这是用户列表中的O(n).查找是O(1),因为字典是哈希.
| 归档时间: |
|
| 查看次数: |
5696 次 |
| 最近记录: |