用于循环索引的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':

我以马克·卢茨的书《学习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': 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'}