相关疑难解决方法(0)

在Python中用块(n)迭代迭代器?

你能想出一个很好的方法(可能用itertools)将迭代器拆分成给定大小的块吗?

因此l=[1,2,3,4,5,6,7]chunks(l,3)变成一个迭代[1,2,3], [4,5,6], [7]

我可以想到一个小程序来做这个,但不是一个很好的方式可能itertools.

python iterator

102
推荐指数
6
解决办法
5万
查看次数

为什么数据字典的内存开销是磁盘上相同数据的两倍?

我试图从包含大约300万个json序列化对象的文件中加载数据集.每个对象都是一个包含各种类型的大型嵌套字典 - 整数,浮点数,列表和其他字典.

磁盘上文件的大小约为60GB.我有超过128GB的内存,所以我应该能够将整个内存放入内存中.但是,当我使用以下代码将数据加载到大型字典中时,已使用内存的大小增加到至少110GB(它甚至可能会变大但我在脚本增长之前就停止了.)

什么可以解释我在尝试加载此数据时看到的内存开销?为什么60GB磁盘会在内存中转换为110GB或更多?据我所知,这里唯一的开销应该是为对象创建列表容器,以及在结果字典中为这些列表分配一个键名.这不可能占据数据本身几乎两倍的内存 - 可以吗?

def load_by_geohash(file, specificity=7):
    results = defaultdict(list)
    filename = os.path.join(DATADIR, file)

    with open(filename, 'r') as f:
        updates = (json.loads(line) for line in f)
        for update in updates:
            geo_hash = update['geohash'][:specificity]
            results[geo_hash].append(update)

    return results
Run Code Online (Sandbox Code Playgroud)

python python-3.x

1
推荐指数
1
解决办法
79
查看次数

标签 统计

python ×2

iterator ×1

python-3.x ×1