首先,我是正确的假设:
dict1 = {'a':['b','c']}
(key,value), = dict1.items()
指定'key'作为dict的键,'value'作为dict的值? 另外,为什么需要(键,值)之后的逗号?
和我真正的问题:
我如何在一个每个键上有5个以上值的大字典中执行此操作?当我试图在我的词典中做到这一点时,它说如下:
builtins.ValueError: too many values to unpack (expected 1)
有没有办法在没有itertools模块的情况下做到这一点?
答案 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]]