用于循环索引的Python
我以马克·卢茨的书《学习Python》为例用于循环索引的Python,python,Python,我以马克·卢茨的书《学习Python》为例 keys = ['spam','eggs','toast'] vals=[1,4,7] D2={} for (v,k) in zip(keys, vals): D2[k] = v D2 {1: 'spam', 4: 'eggs', 7: 'toast'} 我的例子是: D1={} for (k,v) in zip(keys, vals): D1[k] = v D1 {'toast': 7, 'eggs': 4, 'spam':
keys = ['spam','eggs','toast']
vals=[1,4,7]
D2={}
for (v,k) in zip(keys, vals): D2[k] = v
D2
{1: 'spam', 4: 'eggs', 7: 'toast'}
我的例子是:
D1={}
for (k,v) in zip(keys, vals): D1[k] = v
D1
{'toast': 7, 'eggs': 4, 'spam': 1}
所以,我仍然不理解索引,为什么是(v,k)?zip将返回元组列表
:
演示:
打开包装
演示:
它是键和值列表的压缩列表的每个元组中的键和值,然后分配键/值对。对于zip中的v、k(键、VAL)来说,这些参数是不必要的。
。您的代码与本书代码的不同之处在于,按v,k
的顺序,您使用键
列表作为键,本书则相反
您还可以在一个步骤中创建dict,在压缩的项目上调用dict,如果您颠倒传递给zip的列表的顺序,那么您将得到完全相同的行为:
D2 = dict(zip(keys, vals))
print D2
D2 = dict(zip(vals, keys))
print(D2)
{'toast': 7, 'eggs': 4, 'spam': 1}
{1: 'spam', 4: 'eggs', 7: 'toast'}
唯一的区别是顺序。列表是命名键和值这一事实可能有点令人困惑,因为这些值最终是键,反之亦然,但要理解的主要问题是,您正在将循环中的k
分配给keys
列表中的每个元素,而图书代码的作用正好相反
>>> t = (1,2,3)
>>> t
(1, 2, 3)
>>> a,b,c = t
>>> a
1
>>> b
2
>>> c
3
>>> a,b = t
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
>>>
>>> D2={}
>>> for (v,k) in zip(keys, vals):
... print "v:", v
... print "k", k
... D2[k] = v
... # ^ ^
# Key Value
v: spam
k 1
v: eggs
k 4
v: toast
k 7
>>> D2
{1: 'spam', 4: 'eggs', 7: 'toast'}
>>>
D2 = dict(zip(keys, vals))
print D2
D2 = dict(zip(vals, keys))
print(D2)
{'toast': 7, 'eggs': 4, 'spam': 1}
{1: 'spam', 4: 'eggs', 7: 'toast'}