Jerry~Mouse 发表于 2022-3-14 14:17:16

字典的创建问题

>>> list(zip(,))
[(1, 10), (2, 20), (3, 30)]                     
>>> zip(,)
<zip object at 0x00000289D4A55700>
>>> dict(zip(,))
{1: 10, 2: 20, 3: 30}                               #为什么这里可以直接zip而不需要加list
>>> dict(list(zip(,)))
{1: 10, 2: 20, 3: 30}                               #这个我能理解,把第一行的list(zip(,))值——[(1, 10), (2, 20), (3, 30)]    带入就是一个创建字典的方法,但是为什么不加list也可以呢


为什么可以直接dict(zip([],[])),而不需要加list,不是说只能有一个对象吗(所以才会中间那层括号dict(([],[]))),但是不加list的话,还是一个对象吗

isdkz 发表于 2022-3-14 14:30:40

本帖最后由 isdkz 于 2022-3-14 14:32 编辑

因为 dict 只需要接受一个可迭代对象,且每一次迭代都可以迭代出2个元素作为键和值,

zip 返回的是一个 zip 对象,zip 对象跟 列表 对象一样也是可迭代的

Jerry~Mouse 发表于 2022-3-14 15:18:19

isdkz 发表于 2022-3-14 14:30
因为 dict 只需要接受一个可迭代对象,且每一次迭代都可以迭代出2个元素作为键和值,

zip 返回的是一个...

所以归根结底 只需要是可迭代对象就可以了吗

isdkz 发表于 2022-3-14 15:21:46

本帖最后由 isdkz 于 2022-3-14 15:28 编辑

Jerry~Mouse 发表于 2022-3-14 15:18
所以归根结底 只需要是可迭代对象就可以了吗

嗯嗯,可迭代对象都可以,

还有就是这个可迭代对象要一次能迭代且只能迭代出包含两个元素的序列(这里你没看错,就是序列,包含字符串),你可以试试这个 :
test = dict(('ab',))
print(test)


而且迭代出的序列中第一个元素不能是可变对象或包含可变对象,因为可变对象不能做字典的键

Jerry~Mouse 发表于 2022-3-14 15:37:12

isdkz 发表于 2022-3-14 15:21
嗯嗯,可迭代对象都可以,

还有就是这个可迭代对象要一次能迭代且只能迭代出包含两个元素的序列(这 ...

啊~原来如此 谢谢解答
页: [1]
查看完整版本: 字典的创建问题