【问题标题】:Error:- too many values to unpack (expected 2) python function错误:- 解包的值太多(预期为 2)python 函数
【发布时间】:2021-06-20 16:07:29
【问题描述】:

我的代码:-

Videos10k=[{'title': '', 'titleWords': ['...','...'], 'titleLength': 10, 'likes': 86, 'disLikes': 5, 'views': 2202, 'creator': '...', 'description': '...'}]
def getavg(number, array=[]):
    views_avg = 0
    for idx, Video in array:
        views = Video["views"]
        views_avg = views_avg + views

    views_avg = views_avg / len(array)
    print("Average views for " + number + " " + views_avg)


getavg("10k", Videos10k)

我收到此错误。 错误:-

在getavg中 对于 idx, Video in array: ValueError: too many values to unpack (expected 2)

【问题讨论】:

标签: python


【解决方案1】:

您需要仅使用 Video 获取数组中的项目,而不是使用 idx、Video

Videos10k=[{'title': '', 'titleWords': ['...','...'], 'titleLength': 10, 'likes': 86, 'disLikes': 5, 'views': 2202, 'creator': '...', 'description': '...'}]
def getavg(number, array=[]):
    views_avg = 0
    for Video in array:
        views = Video["views"]
        views_avg = views_avg + float(views)

    views_avg = views_avg / len(array)
    print("Average views for " + str(number) + " " + str(views_avg))

或者你可以改成这样

for idex, Video in enumerate(array):

【讨论】:

    【解决方案2】:

    enumerate 函数给出索引号。

    如下更改您的代码

    for idx, Video in enumerate(array):
    

    【讨论】:

    • 只是提到实际上idx 从未在代码中的其他任何地方使用过,即它是多余的。
    • @buran 异常表示in getavg for idx, Video in array: ValueError: too many values to unpack (expected 2)。即使你没有使用idx,代码也需要。
    • 完全正确 - 解决它的一种方法是添加枚举,另一种(如果不需要 idx)是删除 idx,就像@puhuk 在他们的回答中所做的那样,而不是只保留多余的 idx。
    【解决方案3】:

    如果你想遍历数组的索引,你可以像这样使用 enumerate

    for idx, Video in enumerate(array):
    

    或使用 zip

    for idx,Video in zip(range(len(array)),array):
    

    在您的代码中,您从未使用过 idx,因此您不需要它。

    【讨论】:

      【解决方案4】:

      如果您想保持简单,请将 Videos10k 保留为 dict,并让函数处理不同的 type() 输入。

      Videos10k={'title': '', 'titleWords': ['...','...'], 'titleLength': 10, 'likes': 86, 'disLikes': 5, 'views': 2202, 'creator': '...', 'description': '...'}
      
      def getAvg(number,array):
          if type(array) != list:
              print('Average Views For {}: {}'.format(number,array/len([array])))
          else:
              print('Average Views For {}: {}'.format(number,array/len(array)))
      
      
      
      getAvg("10k", Videos10k['views'])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-29
        • 2020-05-11
        • 2019-07-11
        • 1970-01-01
        相关资源
        最近更新 更多