Python-如何解决"ValueError:没有足够的值要解压(预期2,得到1)" [英] Python - How to fix “ValueError: not enough values to unpack (expected 2, got 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屋!