我正在做大量的列表和字典排序…这导致了Python网站中的内存错误
我从数据库中的日志表中检索到数据。然后我开始寻找唯一的用户,比较/排序列表,等等 最后我开始认真考虑这个问题我正在做大量的列表和字典排序…这导致了Python网站中的内存错误,python,optimization,list,dictionary,performance,Python,Optimization,List,Dictionary,Performance,我从数据库中的日志表中检索到数据。然后我开始寻找唯一的用户,比较/排序列表,等等 最后我开始认真考虑这个问题 stats = {'2010-03-19': {'date': '2010-03-19', 'unique_users': 312, 'queries': 1465}, '2010-03-18': {'date': '2010-03-18', 'unique_users': 329, 'queries': 1659}, '2010-03-17': {'date': '2010-03-17
stats = {'2010-03-19': {'date': '2010-03-19', 'unique_users': 312, 'queries': 1465}, '2010-03-18': {'date': '2010-03-18', 'unique_users': 329, 'queries': 1659}, '2010-03-17': {'date': '2010-03-17', 'unique_users': 379, 'queries': 1845}, '2010-03-16': {'date': '2010-03-16', 'unique_users': 434, 'queries': 2336}, '2010-03-15': {'date': '2010-03-15', 'unique_users': 390, 'queries': 2138}, '2010-03-14': {'date': '2010-03-14', 'unique_users': 460, 'queries': 2221}, '2010-03-13': {'date': '2010-03-13', 'unique_users': 507, 'queries': 2242}, '2010-03-12': {'date': '2010-03-12', 'unique_users': 629, 'queries': 3523}, '2010-03-11': {'date': '2010-03-11', 'unique_users': 811, 'queries': 4274}, '2010-03-10': {'date': '2010-03-10', 'unique_users': 171, 'queries': 1297}, '2010-03-26': {'date': '2010-03-26', 'unique_users': 299, 'queries': 1617}, '2010-03-27': {'date': '2010-03-27', 'unique_users': 323, 'queries': 1310}, '2010-03-24': {'date': '2010-03-24', 'unique_users': 352, 'queries': 2112}, '2010-03-25': {'date': '2010-03-25', 'unique_users': 330, 'queries': 1290}, '2010-03-22': {'date': '2010-03-22', 'unique_users': 329, 'queries': 1798}, '2010-03-23': {'date': '2010-03-23', 'unique_users': 329, 'queries': 1857}, '2010-03-20': {'date': '2010-03-20', 'unique_users': 368, 'queries': 1693}, '2010-03-21': {'date': '2010-03-21', 'unique_users': 329, 'queries': 1511}, '2010-03-29': {'date': '2010-03-29', 'unique_users': 325, 'queries': 1718}, '2010-03-28': {'date': '2010-03-28', 'unique_users': 340, 'queries': 1815}, '2010-03-30': {'date': '2010-03-30', 'unique_users': 329, 'queries': 1891}}
这不是一本大字典。但当我想做最后一件事的时候…我就完了
for k, v in stats:
mylist.append(v)
太多的值无法解压缩
这到底是什么意思???要解压缩的值太多。如果您只需要这些值,可以执行以下操作:
mylist = stats.values()
如果需要键值对,则应迭代dict的项:
在问题中的代码中,您只是在dicts键上迭代
由于将一个字符串的键指定给元组k,因此它的字符将被迭代;合乎逻辑的是,这个完整的字符串不能“解压”成一个k,v元组,除非在一个字符串长度正好为2的情况下。这就解释了错误消息:您试图将字符串的每个字符解压为两个占位符k和v。如果您只需要可以执行的值:
mylist = stats.values()
如果需要键值对,则应迭代dict的项:
在问题中的代码中,您只是在dicts键上迭代
由于将一个字符串的键指定给元组k,因此它的字符将被迭代;合乎逻辑的是,这个完整的字符串不能“解压”成一个k,v元组,除非在一个字符串长度正好为2的情况下。这就解释了错误消息:您试图将字符串的每个字符解压为两个占位符k和v。问题是,当您使用for遍历字典时。。。在里面循环,您只需迭代键。您可以通过以下方式演示这一点:
>>> for x in stats: print x
...
2010-03-19
2010-03-18
etc
所以当你在stats中为k,v赋值时:它试图给元组k,v赋值一个字符串。由于字符串是可编辑的,它将尝试一次分配一个字符,因此它会将“2”分配给k,将“0”分配给v,但没有地方分配剩余的字符-因此出现错误
您想要的是调用dict iteritems方法来获取键、值元组序列,或者调用itervalues方法来获取值序列,因为您没有使用键。问题是,当您使用for来迭代字典时。。。在里面循环,您只需迭代键。您可以通过以下方式演示这一点:
>>> for x in stats: print x
...
2010-03-19
2010-03-18
etc
所以当你在stats中为k,v赋值时:它试图给元组k,v赋值一个字符串。由于字符串是可编辑的,它将尝试一次分配一个字符,因此它会将“2”分配给k,将“0”分配给v,但没有地方分配剩余的字符-因此出现错误
您想要的是调用dict iteritems方法来获取键、值元组序列,或者调用itervalues方法来获取值序列,因为您没有使用键。迭代字典时的默认行为相当于调用其keys方法 因此,以下是等效的:
>>> for k in stats: print k
>>> for k in stats.keys(): print k
如果要在一次运行中迭代键和值,必须调用项。迭代字典时的默认行为相当于调用其键方法 因此,以下是等效的:
>>> for k in stats: print k
>>> for k in stats.keys(): print k
如果要在一次运行中迭代键和值,则必须调用项。只是吹毛求疵,但正如@Dave Kirby指出的那样,键实际上是一个字符一个字符地解压的,因此要解压的值太多,如果确实要迭代键和值,我建议使用stats.iteritems而不是stats.items,因为它不会创建字典内容的全新列表。只是吹毛求疵,但正如@Dave Kirby所指出的,它们的键实际上正在被解包,由于字符串是一个字符接一个字符的,因此如果您确实想迭代键和值,那么就需要解包太多的值,我建议使用stats.iteritems而不是stats.items,因为它不会创建字典内容的全新列表。