字典推导式中的遍历问题

看到这两段程序,最初不能理解为什么二者是等价的

>>> k = "k:1|k1:2|k2:3|k3:4"
>>> dict1 = {}
>>> for items in k.split("|"):
...    key, value = items.split(":")
...    dict1[key] = value
>>> {k:v for items in k.split("|") for k, v in (items.split(":"), )}
{'k': '1', 'k1': '2', 'k2': '3', 'k3': '4'}

主要疑问在于后者的字典推导式为什么写成 for k, v in (items.split(":"), )

试着修改成for k, v in items.split(":"),果不其然报错了,如下

原因是in后面需要接一个可迭代对象,而items.split(":")得到的却只是一个列表[key,value],开始迭代后,会先尝试将第一个值key(不是期待的key与value)解包赋给k与v,这并不符合我的本意。

这样就可以理解为什么要在items.split(":")外再嵌套一层了,因为这样,in遍历的就是外层的循环,得到的第一个元素就是列表[key,value],并分别赋给k与v。

那现在还有一个疑问,为什么for k, v in (items.split(":"), )要加一个逗号,理由是:元组创建时如果只有一个元素,那要加一个逗号,不然会将()理解为运算符,就像下面这样

如上仅为个人理解,欢迎各位讨论与提出意见。题目(第99题)链接:http://t.csdnimg.cn/AKh7j 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值