【问题标题】:Python - too many values to unpack at line 10Python - 在第 10 行解压缩的值太多
【发布时间】:2016-06-06 23:12:27
【问题描述】:

在下面的代码中,我试图过滤价格超过 1.00 的水果..

fruits = [
   ( 'apple',  0.99 ),
   ( 'orange', 1.25 ),
   ( 'pear',   1.49 ),
   ( 'banana', 0.75 ),
]

def preferred(fruit):
    pfruit = [ (x, y) for (x, y) in fruit if y > 1 ]
    return pfruit

favorites = filter(preferred, fruits)
print favorites

我收到一条错误消息:

ValueError:在第 10 行解压的值太多

【问题讨论】:

  • 您正在混合 filter 和列表理解(在这种情况下执行相同的操作)您需要执行 favorites = preferred(fruits) 或使 preferred 根据条件返回 True 或 False一个水果。
  • @cricket_007 过滤器将可调用对象作为第一个参数,OP 将 preferred 作为第一个参数传递给可调用对象。

标签: python list filter tuples


【解决方案1】:

选项 1:只需调用不带 filter 的方法

>>> preferred(fruits)
# [('orange', 1.25), ('pear', 1.49)]

选项 2:以某种方式将 filter 与可调用对象一起使用

fruits = [
    ( 'apple',  0.99 ),
    ( 'orange', 1.25 ),
    ( 'pear',   1.49 ),
    ( 'banana', 0.75 ),
]

filter(lambda fruit: fruit[1] > 1.0, fruits)
# [('orange', 1.25), ('pear', 1.49)]

选项 2.5:重写 preferred 函数以返回 True/False 以获得单个水果。

def preferred(fruit):
    return fruit[1] > 1

filter(preferred, fruits)
# [('orange', 1.25), ('pear', 1.49)]

【讨论】:

  • filter 不需要使用 lambda,preferred 可以在 OP 代码中轻松修改以返回列表中 每个 水果的比较,而不是 所有他们
  • 非常感谢。我正在混合两种不同的动物。
  • @cricket_007。对不起板球。我是新手。谢谢你的帮助
猜你喜欢
  • 2018-02-14
  • 2015-09-04
  • 2017-11-25
  • 1970-01-01
  • 1970-01-01
  • 2012-09-27
  • 1970-01-01
  • 1970-01-01
  • 2015-01-17
相关资源
最近更新 更多