ValueError:要解压缩的值太多

时间:2014-12-30 20:29:21

标签: python mongodb sorting dictionary

我正在尝试在MongoDB中对字典进行排序。但是,我得到了值错误"太多的值无法解压缩"因为我认为这意味着每个字典中的值太多(每个字典中有16个值)。这是我的代码:

FortyMinute.find().sort(['Rank', 1])

任何人都知道怎么解决这个问题?

编辑:完全追溯

Traceback (most recent call last):
  File "main.py", line 33, in <module>
    main(sys.argv[1:])
  File "main.py", line 21, in main
    fm.readFortyMinute(args[0])
  File "/Users/Yih-Jen/Documents/Rowing Project/FortyMinute.py", line 71, in readFortyMinute
    writeFortyMinute(FortyMinData)
  File "/Users/Yih-Jen/Documents/Rowing Project/FortyMinute.py", line 104, in writeFortyMinute
    FortyMinute.find().sort(['Rank', 1])        
  File "/Users/Yih-Jen/anaconda/lib/python2.7/site-packages/pymongo/cursor.py", line 692, in sort
    self.__ordering = helpers._index_document(keys)
  File "/Users/Yih-Jen/anaconda/lib/python2.7/site-packages/pymongo/helpers.py", line 65, in       _index_document
    for (key, value) in index_list:
ValueError: too many values to unpack

2 个答案:

答案 0 :(得分:1)

您将解压缩中的参数和值传递给:

FortyMinute.find().sort('Rank', 1)

<小时/> 只有当您传递多个排序参数时,才能使用列表对参数和值进行分组,然后您必须使用元组包围所有参数,如下所示:

FortyMinute.find().sort([(Rank', 1), ('Date', 1)])

<小时/> 专业提示:即使下面链接的Cursor.sort文档建议使用pymongo.DESCENDINGpymongo.ASCENDING而不是1和-1;通常,您应该在代码中使用描述性变量名而不是魔术常量,如下所示:

FortyMinute.find().sort('Rank',pymongo.DESCENDING)

<小时/> 最后,如果你如此倾向,你可以使用Python的内置函数对列表进行排序,作为另一个提到的回答者;但即使认为sorted接受迭代器而不仅仅是序列,它可能更低效和非标准:

sorted(FortyMinute.find(), key=key_function)

您可以在其中定义key_function以返回记录的Rank列。

<小时/> Link to the official documentation

答案 1 :(得分:0)

如果你想要mong / pymongo进行排序:

FortyMinute.find().sort('Rank', 1)

如果要使用多个字段进行排序:

FortyMinute.find().sort([('Rank': 1,), ('other', -1,)])

您还有一些常量可以让您更清楚自己在做什么:

FortyMinute.find().sort('Rank',pymongo.DESCENDING)

如果你想首先在python中排序,你必须返回结果并在python中使用排序方法:

sorted(FortyMinute.find(), key=<some key...>)