Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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
python:在大型字典上迭代_Python_Dictionary - Fatal编程技术网

python:在大型字典上迭代

python:在大型字典上迭代,python,dictionary,Python,Dictionary,首先,我是否正确地假设: dict1 = {'a':['b','c']} (key,value), = dict1.items() 指定“键”为dict的键,“值”为dict的值? 还有,为什么需要(键、值)后面的逗号 我真正的问题是: 如何在每个键有5个以上值的较大字典上执行此操作?当我试着在我的dict上做这件事时,它说: builtins.ValueError: too many values to unpack (expected 1) 在没有itertools模块的情况下,

首先,我是否正确地假设:

dict1 = {'a':['b','c']}  
(key,value), = dict1.items()  
指定“键”为dict的键,“值”为dict的值? 还有,为什么需要(键、值)后面的逗号

我真正的问题是:
如何在每个键有5个以上值的较大字典上执行此操作?当我试着在我的dict上做这件事时,它说:

builtins.ValueError: too many values to unpack (expected 1)

在没有itertools模块的情况下,有没有办法做到这一点?

要在“大字典”上迭代,您需要一个循环构造:

>>> dict1={'a':[1,2,3,4,5], 'b':[6,7,8,9], etc}
>>> (key,value), = dict1.items() 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
>>> for k,v in dict1.items():
...    print k,v
... 
a [1, 2, 3, 4, 5]
b [6, 7, 8, 9]
etc
不是做你想做的事

Python支持元组赋值。左侧的数字需要与右侧的数字匹配:

x,y=1,2
(Python3除外,它有可爱的
*
用于LH分配):

(键,值),
中的尾随逗号在Py2或Py3中的上下文中不明确

使用尾随逗号构造具有单个元素的元组:

>>> 1,
(1,)
>>> 1,2,
(1, 2)
对于多个元素,它将被忽略

通过在左侧添加paren,然后添加一个尾随逗号,可以创建一个嵌套元组:

>>> (1,2),
((1, 2),)
指定给此类野兽的唯一方法是匹配右侧的嵌套:

>>> (x,y),z=((1,2),3)
>>> x,y,z
(1, 2, 3)
如果不使用括号在Python中显式创建元组,则需要注意以下事项:

您可以这样做:

您可以使用zip从这两个键/值列表构造dict:

>>> dict(zip(keys,values))
{'a': [1, 2, 3, 4, 5], 'b': [6, 7, 8, 9]}

要在“大字典”上迭代,需要循环构造:

>>> dict1={'a':[1,2,3,4,5], 'b':[6,7,8,9], etc}
>>> (key,value), = dict1.items() 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
>>> for k,v in dict1.items():
...    print k,v
... 
a [1, 2, 3, 4, 5]
b [6, 7, 8, 9]
etc
不是做你想做的事

Python支持元组赋值。左侧的数字需要与右侧的数字匹配:

x,y=1,2
(Python3除外,它有可爱的
*
用于LH分配):

(键,值),
中的尾随逗号在Py2或Py3中的上下文中不明确

使用尾随逗号构造具有单个元素的元组:

>>> 1,
(1,)
>>> 1,2,
(1, 2)
对于多个元素,它将被忽略

通过在左侧添加paren,然后添加一个尾随逗号,可以创建一个嵌套元组:

>>> (1,2),
((1, 2),)
指定给此类野兽的唯一方法是匹配右侧的嵌套:

>>> (x,y),z=((1,2),3)
>>> x,y,z
(1, 2, 3)
如果不使用括号在Python中显式创建元组,则需要注意以下事项:

您可以这样做:

您可以使用zip从这两个键/值列表构造dict:

>>> dict(zip(keys,values))
{'a': [1, 2, 3, 4, 5], 'b': [6, 7, 8, 9]}

你有点含糊不清,但我认为你有两个要求:

如何保存变量中的所有键和变量中的所有值:

values = dict1.values()
keys = dict1.keys()
或者,更可能的情况是,您希望能够使用它轻松地遍历字典:

for key,value in dict1.iteritems():
    print k,v

你有点含糊不清,但我认为你有两个要求:

如何保存变量中的所有键和变量中的所有值:

values = dict1.values()
keys = dict1.keys()
或者,更可能的情况是,您希望能够使用它轻松地遍历字典:

for key,value in dict1.iteritems():
    print k,v

不,第一个假设是不正确的。给定
dict1

>>> dict1 = {'a': ['b', 'c']}
>>> dict1.items()
[('a', ['b', 'c'])]
因此,
项的结果是一个列表。如您所知,Python(在一定程度上)具有解构分配:

>>> a, b = ['hello', 'world']
>>> a
'hello'
>>> b
'world'
它使用元组的语法,如您所知,要生成1元组,您可以使用一个尾随逗号:

>>> a, = ['hello']
>>> a
'hello'
现在,如果您试图用错误数量的值解包,会发生什么

>>> a, = ['hello', 'world']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 1)

不,第一个假设是不正确的。给定
dict1

>>> dict1 = {'a': ['b', 'c']}
>>> dict1.items()
[('a', ['b', 'c'])]
因此,
项的结果是一个列表。如您所知,Python(在一定程度上)具有解构分配:

>>> a, b = ['hello', 'world']
>>> a
'hello'
>>> b
'world'
它使用元组的语法,如您所知,要生成1元组,您可以使用一个尾随逗号:

>>> a, = ['hello']
>>> a
'hello'
现在,如果您试图用错误数量的值解包,会发生什么

>>> a, = ['hello', 'world']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 1)

而不是假设您始终可以实际运行代码。就在你面前。我猜它会抓取dict中的第一个键和值,并将它们分别分配给
key
value
。除非您得到的错误实际上来自该代码,否则如果
dict
包含多个项,那么它就不起作用。逗号是必需的,因为您正在解构
(键,值)
元组的一项序列-因此需要将其分配给变量的一项元组。(这些变量中的每一个本身都必须是一个两项元组。)如果这让人感到困惑,部分原因是您所做的事情可能不是完成您试图做的事情的正确方式,您没有很好地描述过这一点。您应该提供一个实际导致错误的代码示例,以及预期的结果,而不是假设您始终可以实际运行代码。就在你面前。我猜它会抓取dict中的第一个键和值,并将它们分别分配给
key
value
。除非您得到的错误实际上来自该代码,否则如果
dict
包含多个项,那么它就不起作用。逗号是必需的,因为您正在解构
(键,值)
元组的一项序列-因此需要将其分配给变量的一项元组。(这些变量中的每一个本身都必须是一个两项元组。)如果这让人感到困惑,部分原因是您所做的事情可能不是完成您试图做的事情的正确方式,您没有很好地描述过这一点。您应该提供一个代码示例,该示例实际导致了您所遇到的错误以及您所期望的结果。请注意,
dict2.keys()
dict2.values()
保证以相同的顺序遍历dict,前提是您不在两者之间进行修改。请注意,
dict2.keys()
dict2.values()
保证以相同的顺序遍历dict,前提是不在两者之间进行修改。