鱼C论坛

 找回密码
 立即注册
查看: 2746|回复: 14

关于字典的一些问题

[复制链接]
发表于 2016-2-19 15:00:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1.dict3 = dict ((('F',70),('I',105),('S',115),('H',104),('C',67)))
为什么有三个括号?小甲鱼说dict只有一个参数,那为什么是三个括号,不是两个括号呢?
2.
dict3 = dict(1=one,2=two,3=three)
会提示keyword can't be an expression
dict3 = dict(((1,70),('I',105)))
这种(1,70)为什么又不会报这个错呢?
谢谢。
2.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-2-19 15:23:34 | 显示全部楼层
1.
  1. >>> t1 = (('F',70),('I',105),('S',115),('H',104),('C',67))
  2. >>> t2 = ('F',70),('I',105),('S',115),('H',104),('C',67)
  3. >>> t1
  4. (('F', 70), ('I', 105), ('S', 115), ('H', 104), ('C', 67))
  5. >>> t2
  6. (('F', 70), ('I', 105), ('S', 115), ('H', 104), ('C', 67))
  7. >>> t1 == t2
  8. True
  9. >>>
复制代码


2.
用引号引起来再试试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-19 15:32:31 | 显示全部楼层
dict函数只能有一个变量,把上面的语句分为两行可能更清楚些。
  1. tuple1 = (('F',70),('I',105),('S',115),('H',104),('C',67))
  2. dict3 =  dict(tuple1)
复制代码


第一层括号是函数的
第二层括号是将小元组组成大元组
第三层括号是小元组的
  1. dict3 = dict ((('F',70),('I',105),('S',115),('H',104),('C',67)))
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-19 17:38:11 | 显示全部楼层
看帮助文档
class dict(**kwarg)
class dict(mapping, **kwarg)
class dict(iterable, **kwarg)

If no positional argument is given, an empty dictionary is created. If a positional argument is given and it is a mapping object, a dictionary is created with the same key-value pairs as the mapping object. Otherwise, the positional argument must be an iterable object. Each item in the iterable must itself be an iterable with exactly two objects. The first object of each item becomes a key in the new dictionary, and the second object the corresponding value. If a key occurs more than once, the last value for that key becomes the corresponding value in the new dictionary.

没有参数创建一个空字典
如果传入的参数是映射对象,就将这个键值对创建
或者可以传入一个可迭代的对象,每个迭代对象要有两个值,第一个值作为键,第二个作为值,以此创建字典

你第一个问题相当于传入的就是一个可迭代的对象  
第一个括号是dict类的括号 dict(), 第二个是迭代对象整体的括号(('F',70),('I',105),('S',115),('H',104),('C',67)),最里层的括号是('F',70)每一个迭代对象,其有两个值


小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-2-22 11:25:53 | 显示全部楼层

1.虽然t1=t2,可是如果赋值:
dict3 = dict(('F',70),('I',105),('S',115),('H',104),('C',67))是会报错的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-22 11:33:49 | 显示全部楼层
shuofxz 发表于 2016-2-19 17:38
看帮助文档
class dict(**kwarg)
class dict(mapping, **kwarg)

第二个是迭代对象整体的括号(('F',70),('I',105),('S',115),('H',104),('C',67))--为什么这个整体的括号是必须的呢?
楼上说第二层括号是将小元组组成大元组(不知和你讲的是否同一个意思?),既然括号对元组并不是必须的,为什么这一层括号不能省去?谢谢啦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-22 12:39:59 | 显示全部楼层
一二二四四 发表于 2016-2-22 11:33
第二个是迭代对象整体的括号(('F',70),('I',105),('S',115),('H',104),('C',67))--为什么这个整体的括号 ...

看我写出来的帮助文档了么,dict() 传入的①空 ②映射对象 ③可迭代对象
你写的显然是第三种情况,也就是说传入的是一个可迭代的对象
第二层括号整体就相当于那个可迭代对象
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-22 16:14:19 | 显示全部楼层
shuofxz 发表于 2016-2-22 12:39
看我写出来的帮助文档了么,dict() 传入的①空 ②映射对象 ③可迭代对象
你写的显然是第三种情况,也就 ...

能麻烦具体解释下什么样的是传入的 ②映射对象,什么样的是传入的 ③可迭代对象吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-22 22:03:10 | 显示全部楼层
一二二四四 发表于 2016-2-22 16:14
能麻烦具体解释下什么样的是传入的 ②映射对象,什么样的是传入的 ③可迭代对象吗?

as.png
dict3传入的就是可迭代对象
dict4就是以映射对象(键值对)方式传入
如果还是不太明白,你可以看一下小甲鱼老师25、26课讲的字典
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-23 14:45:31 | 显示全部楼层
4楼解释的非常详细了。至于可迭代对象即所谓的 iterable objects教程中也有讲过,不妨回顾一下。映射类型此处则指的是能形成“键值对”的形式的对象。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-23 16:54:41 | 显示全部楼层
看了一遍,学习了,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-24 17:10:51 | 显示全部楼层
shuofxz 发表于 2016-2-22 22:03
dict3传入的就是可迭代对象
dict4就是以映射对象(键值对)方式传入
如果还是不太明白,你可以看一下 ...

感谢!明白了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-26 09:36:24 | 显示全部楼层
楼上都解释的好详细啊~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-19 17:22:46 | 显示全部楼层
对于你第二个问题自己的一些看法:因为元组里面的数据类型是既可以存放整型,也可以存放字符串行,所以(1,70),(‘I’,50)都是可以的。因为这是一个元组
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-10 09:24:16 | 显示全部楼层
看了一遍,又学习了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-19 18:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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