我正在阅读以下主题:Make dictionary from list with python
最初的问题是将元组(1,’a’,2,’b’,3,’c’)转换为字典{1:’a’,2:’b’,3:’c’}.给出了许多有趣的解决方案,包括以下两个:
解决方案1:
dict(x[i:i+2] for i in range(0, len(x), 2))
解决方案2:
dict(zip(*[iter(val_)] * 2))
在解决方案1中,为什么还要创建具有范围的实际列表呢? xrange(0,len(x),2)不会更有内存效率吗?解决方案2的相同问题:zip创建一个实际列表.为什么不使用itertools.izip呢?
解决方法:
为什么要创建带范围的实际列表呢?
是的,xrange(0,len(x),2)的内存效率更高.
为什么不在解决方案2中使用itertools.izip()?
是的,zip()创建一个实际列表,因此您可以使用itertools.izip来节省内存.
这真的有所作为吗?
速度差异可能很小.仅当数据超出内存缓存的大小时,内存效率才能提高速度.迭代器的开销抵消了一些好处.
由于字典存储了键和值,因此元组中保存的唯一内存指向键和值.因此,在这种情况下的节省比其他迭代器应用程序要小得多,后者不会在容器中累积所有结果.
所以这很可能“无所事事”.
那么Python 3呢?
在Python 3中,range()和zip()都返回迭代器.