【问题标题】:"too many values to unpack" iterating over dictionary indexed by tuples“解包的值太多”迭代由元组索引的字典
【发布时间】:2019-04-21 08:05:51
【问题描述】:

我正在尝试定义一个函数,该函数从与指定索引相关的字典 studentPerf(非常大,但我给出了前三项)的键中返回数据元素列表,其中每个可能的值是只列出一次。例如,如果字典中的键是 [('John',2),('Julie',2),('John',3),('John',1),('Julie',1) ,('Julie',3)],那么这个函数应该返回索引 0 的 ['John','Julie'] 和索引 1 的 [1,2,3]。

到目前为止,我一直收到错误“ValueError:解压的值太多(预期为 2)”

studentPerf = {('Jeffery','male','junior'):[0.81,0.75,0.74,0.8],
('Able','male','senior'):[0.87,0.79,0.81,0.81],
('Don','male','junior'):[0.82,0.77,0.8,0.8]}


def select(key, index): 
    for key, index in studentPerf.keys():
        print(index)

select(0,1)

【问题讨论】:

    标签: python dictionary dictionary-comprehension


    【解决方案1】:

    用于解包元组(此处为键..)您有 3 个值。但是,您只是解压缩成两个变量。这样做:

    for (name, gender, year)
    

    【讨论】:

    • 我故意使用 .keys(),因为我对字典中的值不感兴趣。本质上,我想获取元组的不同部分。这样我可以使用 select() 函数按性别和类别对字典进行排序
    【解决方案2】:

    我不明白你的目的。

    但是函数选择的错误是:

    1. studentPerf.keys() 返回一个 3 元组的可迭代对象
    2. 您的代码for key, index in 只需解压两个项目

    你应该:

    1. for index0, index1, index2 in studentPerf.keys():
    2. for key, *index in studentPerf.keys()。这样索引将是一个 2 元组

    【讨论】:

    • 谢谢,这是我的 python 类中的一个练习,我需要在我创建的函数中有 2 个参数。我使用了您的第二个示例,但现在无论我将什么参数传递给 select() 函数,我都会得到相同的输出。 ths 返回: ['male', 'junior'] ['male', 'senior'] ['male', 'junior'] 我想要第一个参数选择字典中的哪个键,第二个用于选择要选择该元组中的哪个元素的参数。
    猜你喜欢
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    • 2017-12-05
    • 2021-06-24
    • 2021-05-20
    • 2020-04-01
    相关资源
    最近更新 更多