Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将2元素列表作为键/值对添加到python字典中?_Python_Python 3.x - Fatal编程技术网

如何将2元素列表作为键/值对添加到python字典中?

如何将2元素列表作为键/值对添加到python字典中?,python,python-3.x,Python,Python 3.x,我想将2元素列表的内容添加到python字典(python3)中。第一个元素是键,第二个元素是值 我跟着,但可能我误解了内容 这就是我要做的 mydict = {"test": "1"} key_value_pair = ["test2", "42"] mydict.update(key_value_pair) 预期结果是有一个包含两个条目的dict: { "test": "1

我想将2元素列表的内容添加到python字典(python3)中。第一个元素是键,第二个元素是值

我跟着,但可能我误解了内容

这就是我要做的

mydict = {"test": "1"}
key_value_pair = ["test2", "42"]
mydict.update(key_value_pair)
预期结果是有一个包含两个条目的dict:

{
    "test": "1",
    "test2" : "42"
}
但是我得到了一个错误
ValueError:dictionary update sequence元素#0的长度为5;2是必需的

当然,我可以这样做:

mydict[key_value_pair[0]] = key_value_pair[1]
但其思想是拆分一个字符串,并将这两个元素直接用作键/值对:

mystring = "test2=42"
mydict.update(mystring.split("="))
而不是

mystring = "test4=42"
splitted_string = mystring.split("=")
mydict[splitted_string[0]] = splitted_string[1]
我希望你能从以下几点中看到重点…

使用其他键/值对更新字典,覆盖现有键。返回无。
update()
接受另一个dictionary对象或键/值对的iterable(作为元组或长度为2的其他iterable)。如果指定了关键字参数,则使用这些键/值对更新字典:
d.update(红色=1,蓝色=2)

因此,当您提供一个
iterable
时,它希望iterable的每个元素都是键值对

这就是为什么这样做的原因:

kvp = ["newkey", "newval"]
mydict.update([kvp])
输入iterable的每个元素都是一个2元素列表

当你这么做的时候

mydict.update(kvp)
update()
尝试确保
kvp
的每个元素都是两个元素的iterable。由于字符串是可编辑的,因此会出现元素长度无效的错误


旁注:如果
kvp
包含整数或不可计算的内容:

kvp2 = [0, 42]
mydict.update(kvp2)
你会得到这个错误

TypeError:无法将字典更新序列元素#0转换为序列


因此,要使用
split()
操作的结果更新dict,只需将该列表包装到另一个iterable中(以下示例中的列表)

如果你想让iterable成为一个元组,这里有一个小问题。只需将
mystring.split()
括在括号中:
(mystring.split(“=”)
不会创建元组。相反,您需要添加逗号
(mystring.split(“=”)
,以创建元组

t1 = (mystring.split("="))
print(type(t1))
# Output: list
t2 = (mystring.split("="), )
print(type(t2))
# Output: tuple

mydict.update((mystring.split("="), ))
如果您有一个在键和值之间交替的
N
字符串列表,那么将其重塑为一个
N/2x2
键-值对列表是相当容易的:

mydict = {"test": "1"}

all_kvp = ["key1", "val1", "key2", "val2", "key3", "val3"]
kvp = [(k, v) for k, v in zip(all_kvp[::2], all_kvp[1::2])] # creates a list-of-tuples, but a list-of-lists would also work.

mydict.update(kvp)
# mydict: {'test': '1', 'key1': 'val1', 'key2': 'val2', 'key3': 'val3'}
从:

使用其他键/值对更新字典,覆盖现有键。返回无。
update()
接受另一个dictionary对象或键/值对的iterable(作为元组或长度为2的其他iterable)。如果指定了关键字参数,则使用这些键/值对更新字典:
d.update(红色=1,蓝色=2)

因此,当您提供一个
iterable
时,它希望iterable的每个元素都是键值对

这就是为什么这样做的原因:

kvp = ["newkey", "newval"]
mydict.update([kvp])
输入iterable的每个元素都是一个2元素列表

当你这么做的时候

mydict.update(kvp)
update()
尝试确保
kvp
的每个元素都是两个元素的iterable。由于字符串是可编辑的,因此会出现元素长度无效的错误


旁注:如果
kvp
包含整数或不可计算的内容:

kvp2 = [0, 42]
mydict.update(kvp2)
你会得到这个错误

TypeError:无法将字典更新序列元素#0转换为序列


因此,要使用
split()
操作的结果更新dict,只需将该列表包装到另一个iterable中(以下示例中的列表)

如果你想让iterable成为一个元组,这里有一个小问题。只需将
mystring.split()
括在括号中:
(mystring.split(“=”)
不会创建元组。相反,您需要添加逗号
(mystring.split(“=”)
,以创建元组

t1 = (mystring.split("="))
print(type(t1))
# Output: list
t2 = (mystring.split("="), )
print(type(t2))
# Output: tuple

mydict.update((mystring.split("="), ))
如果您有一个在键和值之间交替的
N
字符串列表,那么将其重塑为一个
N/2x2
键-值对列表是相当容易的:

mydict = {"test": "1"}

all_kvp = ["key1", "val1", "key2", "val2", "key3", "val3"]
kvp = [(k, v) for k, v in zip(all_kvp[::2], all_kvp[1::2])] # creates a list-of-tuples, but a list-of-lists would also work.

mydict.update(kvp)
# mydict: {'test': '1', 'key1': 'val1', 'key2': 'val2', 'key3': 'val3'}
发件人:

update()
接受另一个dictionary对象或键/值对的iterable(作为元组或长度为2的其他iterable)

对于您的代码,出现了一个异常,因为
“test2”
是一个iterable,但长度为5而不是2

例如,您可以将您的2个列表包装到另一个列表中以使其工作:

mydict={“测试”:“1”} ... 键值对=[“test2”,“42”] ... mydict.update([key\u value\u pair]) >>>麦迪克特 {'test':'1','test2':'42'} 来自:

update()
接受另一个dictionary对象或键/值对的iterable(作为元组或长度为2的其他iterable)

对于您的代码,出现了一个异常,因为
“test2”
是一个iterable,但长度为5而不是2

例如,您可以将您的2个列表包装到另一个列表中以使其工作:

mydict={“测试”:“1”} ... 键值对=[“test2”,“42”] ... mydict.update([key\u value\u pair]) >>>麦迪克特 {'test':'1','test2':'42'} 但其思想是拆分一个字符串,并将这两个元素直接用作键/值对:

mystring = "test2=42"
mydict.update(mystring.split("="))
如果要拆分字符串并将这两个元素直接用作键/值对,那么我认为这是最简单的方法:

mydict = {"test": "1"}
mydict.update(["test2=42".split("=")]) # this statement
print(mydict)
这将按预期打印:

{'test':'1','test2':'42'}

但其思想是拆分一个字符串,并将这两个元素直接用作键/值对:

mystring = "test2=42"
mydict.update(mystring.split("="))
如果要拆分字符串并将这两个元素直接用作键/值对,那么我认为这是最简单的方法:

mydict = {"test": "1"}
mydict.update(["test2=42".split("=")]) # this statement
print(mydict)
这将按预期打印:


{'test':'1','test2':'42'}

mydict.update([“test2”,“42”],)
。请注意出现了
。是的,我看到了
是“键”。。。非常好,谢谢
mydict.update(([“test2”,“42”],)
。请注意