python:迭代一个大字典

时间:2013-12-02 02:25:00

标签: python dictionary

首先,我是正确的假设:

dict1 = {'a':['b','c']}  
(key,value), = dict1.items()  

指定'key'作为dict的键,'value'作为dict的值? 另外,为什么需要(键,值)之后的逗号?

和我真正的问题:
我如何在一个每个键上有5个以上值的大字典中执行此操作?当我试图在我的词典中做到这一点时,它说如下:

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

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

3 个答案:

答案 0 :(得分:3)

你有点模糊,但我认为你要求的有两件事:

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

values = dict1.values()
keys = dict1.keys()

或者,更有可能的是,您希望能够使用它来轻松地遍历字典:

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

答案 1 :(得分:2)

不,第一个假设是不正确的。鉴于dict1

>>> dict1 = {'a': ['b', 'c']}
>>> dict1.items()
[('a', ['b', 'c'])]

因此items的结果是一个列表。您可能知道,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方法:

>>> dict2 = {'a': ['b', 'c'], 'd': ['e', 'f', 'g', 'h']}
>>> dict2.keys()
['a', 'd']
>>> dict2.values()
[['b', 'c'], ['e', 'f', 'g', 'h']]

答案 2 :(得分:0)

要迭代'大词典',你需要一个循环结构:

>>> 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

你在这里的构造:

(key,value),=dict1.items() 

没有做你的想法。

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

x,y=1,2

(除了对于LH分配有可爱*的Python 3):

first, second, *the_rest=[1,2,3,4,5,6,7]

{2}中的尾随逗号在此上下文中在Py2或Py3中是不明确的。

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

(key,value),

如果有多个元素,则会被忽略。

在LH上添加了parens然后是一个尾随逗号,你正在创建一个嵌套的元组:

>>> 1,
(1,)
>>> 1,2,
(1, 2)

你可以分配给这种野兽的唯一方法是匹配RH上的嵌套:

>>> (1,2),
((1, 2),)

不使用括号在Python中显式创建元组,您需要小心order of operations

>>> (x,y),z=((1,2),3)
>>> x,y,z
(1, 2, 3)

可以这样做:

>>> (1,2)==1,2
(False, 2)
# probably not what is expected here...

你可以使用zip:

从这两个键/值列表构造一个dict
>>> dict1={'a':[1,2,3,4,5], 'b':[6,7,8,9]}
>>> keys, values=dict1.keys(), dict1.values()
>>> keys
['a', 'b']
>>> values
[[1, 2, 3, 4, 5], [6, 7, 8, 9]]