我正在做很多列表和字典排序......这导致Python网站出现内存错误

TIM*_*MEX 1 python optimization performance dictionary list

我从数据库中的日志表中检索数据.然后我开始寻找独特的用户,比较/排序列表等.

最后我得到了这个.

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}}
Run Code Online (Sandbox Code Playgroud)

这不是一本大字典.但是,当我试着做最后一件事时...它在我身上疯狂.

 for k, v in stats:
    mylist.append(v)
Run Code Online (Sandbox Code Playgroud)

解包的价值太多了

这是什么意思???有太多的价值可以解决问题.

Chr*_*heD 7

如果你只想要你可以做的值:

mylist = stats.values()
Run Code Online (Sandbox Code Playgroud)

如果你需要键 - 值对,你应该迭代dict的项目:

mylist = []
for k,v in stats.iteritems():
    mylist.append(v)
Run Code Online (Sandbox Code Playgroud)

在您的问题的代码中,您只是迭代dicts .

由于您将单个字符串(键)分配给元组(k,v),因此它的字符将被迭代; 这个完整的字符串无法解压缩到(k,v)元组是合乎逻辑的,除非你的字符串长度恰好是两个.这解释了错误消息:您尝试将字符串的每个字符解包为仅两个占位符(k和v).


Dav*_*rby 5

问题是,当您使用for ... in ...循环遍历字典时,您只能遍历键.您可以通过以下方式证明:

>>> for x in stats: print x
... 
2010-03-19
2010-03-18
etc
Run Code Online (Sandbox Code Playgroud)

所以当你这样做时for k,v in stats:,试图将一个字符串分配给元组(k,v).由于字符串是可迭代的,它将尝试一次分配一个字符,因此它会将"2"分配给k而将"0"分配给v,但无处可分配剩余的字符 - 因此错误.

你想要的是调用dict iteritems方法来获取一个(键,值)元组序列,或调用itervalues方法来获取值的序列,因为你没有使用键.