Python-如何解决"ValueError:没有足够的值要解压(预期2,得到1)" [英] Python - How to fix “ValueError: not enough values to unpack (expected 2, got 1)”

查看:34
本文介绍了Python-如何解决"ValueError:没有足够的值要解压(预期2,得到1)"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要编写一个函数 add_to_dict(d,key_value_pairs),将每个给定的键/值对添加到python字典中.参数 key_value_pairs 是一个以(key,value)形式的元组列表.

I need to write a function add_to_dict(d, key_value_pairs) which adds each given key/value pair to a python dictionary. The argument key_value_pairs will be a list of tuples in the form (key, value).

该函数应返回所有已更改的键/值对的列表(及其原始值).

The function should return a list of all of the key/value pairs which have changed (with their original values).

def add_to_dict(d, key_value_pairs):

   newlist = []

   for key,value in d:
       for x,y in key_value_pairs:
           if x == key:
              newlist.append(x,y)
            
   return newlist

我不断收到错误消息

ValueError:没有足够的值可解包(预期2,得到1)

ValueError: not enough values to unpack (expected 2, got 1)

如何解决此错误?

推荐答案

如何调试代码

'''
@param d: a dictionary
@param key_value_pairs: a list of tuples in the form `(key, value)`
@return: a list of tuples of key-value-pair updated in the original dictionary
'''
def add_to_dict(d, key_value_pairs):

    newlist = []

    for pair in key_value_pairs:

        # As is mentioned by Mr Patrick
        # you might not want to unpack the key-value-pair instantly
        # to avoid possible corrupted data input from
        # argument `key_value_pairs`
        # if you can't guarantee its integrity
        try:
            x, y = pair
        except (ValueError):
            # unable to unpack tuple
            tuple_length = len(pair)
            raise RuntimeError('''Invalid argument `key_value_pairs`!
                Corrupted key-value-pair has ({}) length!'''.format(tuple_length))

        # Instead of using nesting loop
        # using API would be much more preferable
        v = d.get(x)

        # Check if the key is already in the dictionary `d`
        if v:
            # You probably mean to append a tuple
            # as `array.append(x)` takes only one argument
            # @see: https://docs.python.org/3.7/library/array.html#array.array.append
            #
            # Besides, hereby I quote
            # "The function should return a list of all of the key/value pairs which have changed (with their original values)."
            # Thus instead of using the following line:
            #
            # newlist.append((x, y,))
            #
            # You might want a tuple of (key, old_value, new_value)
            # Hence:
            newlist.append((x, v, y,))

        # I don't know if you want to update the key-value-pair in the dictionary `d`
        # take out the following line if you don't want it
        d[x] = y

    return newlist

如果您想知道如何正确遍历 dict 对象,请继续阅读其余部分.

Please keep reading the remaining part if you want to know how to traverse a dict object properly.

以下部分演示了如何在 Python 3.x 中遍历 dict .

The following segments demonstrate how to traverse a dict in Python 3.x.

for key in d:
    value = d[key]
    print(key, value)

the code segment above has the same effect as the following one:

for key in d.keys():
    value = d[key]
    print(key, value)

迭代键值对的集合

密钥的

for key, value in d.items():
    print(key, value)

迭代一组值

d.values()中的值的

Iterate the set of values

for value in d.values():
    print(value)


Python 2.x

以下部分演示了如何在 Python 2.x 中遍历 dict .

for key in d:
    value = d[key]
    print(key, value)

keys()返回字典 d

for key in d.keys():
    value = d[key]
    print(key, value)

iterkeys()返回字典 d

for key in d.iterkeys():
    value = d[key]
    print(key, value)

迭代键值对的集合

values()返回字典 d

for key, value in d.items():
    print(key, value)

itervalues()返回字典 d

for key, value in d.iteritems():
    print(key, value)

迭代一组值

values()返回字典 d

for value in d.values():
    print(value)

itervalues()返回字典 d

for value in d.itervalues():
    print(value)

参考:

这篇关于Python-如何解决"ValueError:没有足够的值要解压(预期2,得到1)"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆