我正在阅读以下主题: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中,为什么要使用range
创建实际列表呢? xrange( 0, len(x), 2 )
不会提高内存效率吗?解决方案2的同一问题:zip
创建一个实际列表。为什么不使用itertools.izip
?
答案 0 :(得分:1)
是的,xrange(0, len(x), 2)
可以提高内存效率。
是的, zip()会创建一个实际列表,因此您可以使用 itertools.izip 来节省内存。
速度差异可能很小。仅当数据超出内存缓存的大小时,内存效率才能提高速度。迭代器的开销抵消了一些好处。
由于字典存储了键和值,因此元组中保存的唯一内存指向键和值。因此,在这种情况下的节省比其他迭代器应用程序要小得多,后者不会在容器中累积所有结果。
所以这很可能“无所事事”。
在Python 3中, range()和 zip()都返回迭代器。
答案 1 :(得分:0)
据我所知
dict(zip(*[iter(val_)] * 2))
是通常的“Pythonic”方式。在优化内容时,Python中的方法是始终分析并查看时间花费的时间。如果上述方法适用于您的应用程序,为什么要对其进行优化?