Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我正在做大量的列表和字典排序…这导致了Python网站中的内存错误_Python_Optimization_List_Dictionary_Performance - Fatal编程技术网

我正在做大量的列表和字典排序…这导致了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,因为它不会创建字典内容的全新列表。