繁体   English   中英

ValueError:太多值无法解包

[英]ValueError: too many values to unpack

我正在尝试对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

您可以这样解压传递参数和值:

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列。


链接到官方文档

如果您想对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...>)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM