关于zip创建字典的疑问
dict()可以创建字典我知道,二维的列表、元组,字典,以及带等号的方法我都知道。只是我在研究使用zip的时候发现了这个问题:>>> z1=('we','will','rock','you')
>>> z2 = (1,2,3,4)
>>> z3 = zip(z1,z2)
>>> z3
<zip object at 0x000001C1F339E400>
>>> for i in z3:
print (i)
('we', 1)
('will', 2)
('rock', 3)
('you', 4)
>>> d = dict(z3)
>>> d
{}而正确的答案应该是这个
>>> d = dict(zip(z1,z2))
>>> d
{'we': 1, 'will': 2, 'rock': 3, 'you': 4}
请问这个是为啥?是和zip的数据结构有关吗?
ps:我也很纳闷,zip已经很像字典了为何还不能像是字典一样显示出来
z1=('we','will','rock','you')
z2 = (1,2,3,4)
z3 = zip(z1,z2)
d = dict(z3)
这样是可以的
zip是个迭代器
你前面用for迭代一遍,把他掏空了就不行了 逃兵 发表于 2021-9-16 08:59
这样是可以的
zip是个迭代器
你前面用for迭代一遍,把他掏空了就不行了
我运行了一下,是可以的,我估计可能和我在shell中的操作有关吧 @小甲鱼 为啥【逃兵】这个答案我自己没碰就是莫名被被人给出了“”“最佳答案”呢? In : zip?
Init signature: zip(self, /, *args, **kwargs)
Docstring:
zip(*iterables) --> zip object
Return a zip object whose .__next__() method returns a tuple where
the i-th element comes from the i-th iterable argument.The .__next__()
method continues until the shortest iterable in the argument sequence
is exhausted and then it raises StopIteration.
哈哈,你要想它像字典那样显示也没问题,自己继承 zip 类,改写一下就行了,比如这样:
class myZip(zip):
def __str__(self):
return str(dict(self))
z = myZip(['a','b'], )
print(z)
print(z.__class__.mro())
阿奇_o 发表于 2021-9-16 09:55
哈哈,你要想它像字典那样显示也没问题,自己继承 zip 类,改写一下就行了,比如这样:
如此说来,还是语言设计的考虑咯。zip让我总感觉怪怪的,哈哈,谢谢回答、!!{:5_109:} Python初学者8号 发表于 2021-9-16 09:54
我运行了一下,是可以的,我估计可能和我在shell中的操作有关吧
和你在shell中运行没有关系
是因为你通过for循环遍历了
z1=('we','will','rock','you')
z2 = (1,2,3,4)
z3 = zip(z1,z2)
for i in z3:
print(i)
d = dict(z3)
这样就不行了 Python初学者8号 发表于 2021-9-16 09:55
@小甲鱼 为啥【逃兵】这个答案我自己没碰就是莫名被被人给出了“”“最佳答案”呢?
版主设定的最佳 逃兵 发表于 2021-9-16 10:01
和你在shell中运行没有关系
是因为你通过for循环遍历了
我草 还可以这样??哥,快说说,为啥遍历了就不行了 !!!{:5_100:} 逃兵 发表于 2021-9-16 10:01
版主设定的最佳
好快啊,手太快了,我的天,一般不是7天,吗{:5_90:} Python初学者8号 发表于 2021-9-16 10:02
我草 还可以这样??哥,快说说,为啥遍历了就不行了 !!!
迭代器就像枪里的子弹
按照你上膛的顺序(有序)
打一发少一发(有量)
你的for循环像是机关枪,打完了所有子弹
一把空枪,再也取不出子弹
比较典型的结构是iter 和zip 逃兵 发表于 2021-9-16 10:10
迭代器就像枪里的子弹
按照你上膛的顺序(有序)
打一发少一发(有量)
>>> z1=('we','will','rock','you')
>>> z2 = (1,2,3,4)
>>> z3 = zip(z1,z2)
>>> d = dict(z3)
>>> d
{'we': 1, 'will': 2, 'rock': 3, 'you': 4}
>>> for i in z3:
print(i)
>>> d
{'we': 1, 'will': 2, 'rock': 3, 'you': 4}
>>> e = dict(z3)
>>> e
{}
你解释的很形象,谢谢!! @冬雪学冬 我的问题帖子刚发才不到一个小时,我人还在呢,没有超过七天的,你这么快给我设置最佳我怎么能更多地多获得吧友的帮助呢?太不负责了吧
页:
[1]