鱼C论坛

 找回密码
 立即注册
查看: 1563|回复: 12

[已解决]关于zip创建字典的疑问

[复制链接]
发表于 2021-9-16 08:59:49 | 显示全部楼层 |阅读模式
3鱼币
dict()可以创建字典我知道,二维的列表、元组,字典,以及带等号的方法我都知道。只是我在研究使用zip的时候发现了这个问题:
  1. >>> z1=('we','will','rock','you')
  2. >>> z2 = (1,2,3,4)
  3. >>> z3 = zip(z1,z2)
  4. >>> z3
  5. <zip object at 0x000001C1F339E400>
  6. >>> for i in z3:
  7.     print (i)
  8.    
  9. ('we', 1)
  10. ('will', 2)
  11. ('rock', 3)
  12. ('you', 4)
  13. >>> d = dict(z3)
  14. >>> d
  15. {}
复制代码
而正确的答案应该是这个
  1. >>> d = dict(zip(z1,z2))
  2. >>> d
  3. {'we': 1, 'will': 2, 'rock': 3, 'you': 4}
复制代码

请问这个是为啥?是和zip的数据结构有关吗?
ps:我也很纳闷,zip已经很像字典了为何还不能像是字典一样显示出来
最佳答案
2021-9-16 08:59:50
  1. z1=('we','will','rock','you')
  2. z2 = (1,2,3,4)
  3. z3 = zip(z1,z2)
  4. d = dict(z3)
复制代码


这样是可以的
zip是个迭代器
你前面用for迭代一遍,把他掏空了就不行了

最佳答案

查看完整内容

这样是可以的 zip是个迭代器 你前面用for迭代一遍,把他掏空了就不行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-16 08:59:50 | 显示全部楼层    本楼为最佳答案   
  1. z1=('we','will','rock','you')
  2. z2 = (1,2,3,4)
  3. z3 = zip(z1,z2)
  4. d = dict(z3)
复制代码


这样是可以的
zip是个迭代器
你前面用for迭代一遍,把他掏空了就不行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-9-16 09:54:33 | 显示全部楼层
逃兵 发表于 2021-9-16 08:59
这样是可以的
zip是个迭代器
你前面用for迭代一遍,把他掏空了就不行了

我运行了一下,是可以的,我估计可能和我在shell中的操作有关吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-9-16 09:55:22 | 显示全部楼层
@小甲鱼 为啥【逃兵】这个答案我自己没碰就是莫名被被人给出了“”“最佳答案”呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-16 09:55:30 | 显示全部楼层
  1. In [1]: zip?
  2. Init signature: zip(self, /, *args, **kwargs)
  3. Docstring:
  4. zip(*iterables) --> zip object

  5. Return a zip object whose .__next__() method returns a tuple where
  6. the i-th element comes from the i-th iterable argument.  The .__next__()
  7. method continues until the shortest iterable in the argument sequence
  8. is exhausted and then it raises StopIteration.
复制代码


哈哈,你要想它像字典那样显示也没问题,自己继承 zip 类,改写一下就行了,比如这样:
  1. class myZip(zip):
  2.     def __str__(self):
  3.         return str(dict(self))

  4. z = myZip(['a','b'], [1, 2])
  5. print(z)
  6. print(z.__class__.mro())
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-9-16 09:58:45 | 显示全部楼层
阿奇_o 发表于 2021-9-16 09:55
哈哈,你要想它像字典那样显示也没问题,自己继承 zip 类,改写一下就行了,比如这样:

如此说来,还是语言设计的考虑咯。zip让我总感觉怪怪的,哈哈,谢谢回答、!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-16 10:01:11 | 显示全部楼层
Python初学者8号 发表于 2021-9-16 09:54
我运行了一下,是可以的,我估计可能和我在shell中的操作有关吧

和你在shell中运行没有关系
是因为你通过for循环遍历了
  1. z1=('we','will','rock','you')
  2. z2 = (1,2,3,4)
  3. z3 = zip(z1,z2)
  4. for i in z3:
  5.     print(i)
  6. d = dict(z3)
复制代码

这样就不行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-16 10:01:41 | 显示全部楼层
Python初学者8号 发表于 2021-9-16 09:55
@小甲鱼 为啥【逃兵】这个答案我自己没碰就是莫名被被人给出了“”“最佳答案”呢?

版主设定的最佳
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-9-16 10:02:38 | 显示全部楼层
逃兵 发表于 2021-9-16 10:01
和你在shell中运行没有关系
是因为你通过for循环遍历了

我草 还可以这样??哥,快说说,为啥遍历了就不行了 !!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-9-16 10:03:19 | 显示全部楼层
逃兵 发表于 2021-9-16 10:01
版主设定的最佳

好快啊,手太快了,我的天,一般不是7天,吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-16 10:10:11 | 显示全部楼层
Python初学者8号 发表于 2021-9-16 10:02
我草 还可以这样??哥,快说说,为啥遍历了就不行了 !!!

迭代器就像枪里的子弹
按照你上膛的顺序(有序)
打一发少一发(有量)
你的for循环像是机关枪,打完了所有子弹
一把空枪,再也取不出子弹

比较典型的结构是iter 和zip
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-9-16 10:21:41 | 显示全部楼层
逃兵 发表于 2021-9-16 10:10
迭代器就像枪里的子弹
按照你上膛的顺序(有序)
打一发少一发(有量)
  1. >>> z1=('we','will','rock','you')
  2. >>> z2 = (1,2,3,4)
  3. >>> z3 = zip(z1,z2)
  4. >>> d = dict(z3)
  5. >>> d
  6. {'we': 1, 'will': 2, 'rock': 3, 'you': 4}
  7. >>> for i in z3:
  8.     print(i)
  9.    
  10. >>> d
  11. {'we': 1, 'will': 2, 'rock': 3, 'you': 4}
  12. >>> e = dict(z3)
  13. >>> e
  14. {}
复制代码


你解释的很形象,谢谢!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-9-17 08:21:33 | 显示全部楼层
@冬雪学冬 我的问题帖子刚发才不到一个小时,我人还在呢,没有超过七天的,你这么快给我设置最佳我怎么能更多地多获得吧友的帮助呢?太不负责了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 01:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表