美文网首页笨办法学PythonPython 程序员
《笨办法学Python》笔记29-----字典,可爱的字典

《笨办法学Python》笔记29-----字典,可爱的字典

作者: 大猫黄 | 来源:发表于2016-05-02 00:05 被阅读375次

    字典

    字典也是python中的基础数据类型。

    提到字典你可能会想到读书时用的新华字典,使用它你可以通过笔划或者拼音定位到汉字,在python中把笔划或者拼音叫做键,通过键找到的汉字称作值,python中的字典就是由键值对组成的集合,这个集合中的每个键都是唯一的,不可重复。

    dict = {key1:value1,key2:value2,...,keyn:valuen}

    字典举例

    dictex = {'1':'beijing', 2:'newyork', 'shanghai':'china'}

    字典中的键和值可以是任意类型数据,字典可以任意类型关联任意类型。

    操作字典

    stuff = {'name':'damao', 'age':36, 'height':175}

    • 索引

    列表中,可通过从0开始的数字对列表中的元素进行索引,如list1[1],list1[-2],list1[1:5],字典通过键进行索引,可返回相应的值。以上例为例,stuff['name']返回‘damao’,stuff['age']返回36

    • 增加

    通过对键值对,可以给字典增加元素,但键不能跟字典中的键重复。

    stuff['weight'] = 70

    stuff[1] = 'what'

    stuff[2] = 'how'

    • 删除

    清空字典使用clear函数,如stuff.clear()

    删除单个元素,可使用关键字del,如del stuff[1]

    还可以使用列表中也使用的pop函数删除字典的元素并返回,但字典中的pop函数至少有一个键参数,并不一定是删除最后一个元素,字典中的数据是无序的,所以并没有第一个,最后一个的说法。

    如有一个字典

    stuff = {'name':'damao', 'age':36,1:'test', 2:'a', 'height':175}

    stuff.pop(1)可删除键值对1:‘test’并返回‘test’

    stuff.pop(3,'b'),不删除任何字典元素但返回'b'

    stuff.pop(2,'f'),删除键值对2:'a',并返回'a'

    使用popitem函数删除并返回字典中的某个元素,如,stuff.popitem()随机删除字典中的一对键值,并以tuple形式返回

    • 修改

    可通过已知键索引对字典进行修改

    stuff['age'] = 45 #修改年龄

    教材举例

    cities = {'CA':'San Francisco', 'MI':'Detroit', 'FL':'Jacksonville'}
    
    
    cities['NY'] = 'New York'
    
    cities['OR'] = 'Portland'
    
    def find_city(themap, state):
      if state in themap:
        return themap[state]
      else:
        return "Not Found"
    
    cities['_find'] = find_city #关联一个函数地址到字典中
    
    while True:
      print "State? (Enter to quit)",
      state = raw_input("> ")
      if not state: break
    
      city_found = cities['_find'](cities, state)
      print city_found
    
    

    字典的大度是地球人都知道的,上例中就保存了一个函数地址在字典中。

    字典类型还有许多重要函数,可通过查阅帮助文档获得。

    如获取字典中的键

    | keys(...)
    | D.keys() -> list of D's keys

    获取字典中的值

    | values(...)
    | D.values() -> list of D's values

    获取字典中的键值对

    | items(...)
    | D.items() -> list of D's (key, value) pairs, as 2-tuples

    上例中有个隐藏的梗,那就是循环在啥情况下会退出?

    if not state: break

    state输入什么值,python会认为False?

    state是通过raw_input函数获得值的,查看raw_input帮助

    
    raw_input(...)
        raw_input([prompt]) -> string
    
        Read a string from standard input.  The trailing newline is stripped.
        If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.
        On Unix, GNU readline is used if enabled.  The prompt string, if given,
        is printed without a trailing newline before reading.
    
    

    1.raw_input函数的返回值是字符串

    2.用户触发EOF,抛出EOFError异常

    EOF是什么鬼?

    EOF,全称END OF FILE,表示"文字流"(stream)的结尾。这里的"文字流",可以是文件(file),也可以是标准输入.

    关于EOF有很多资料,这里截取一段

    Linux中,在新的一行的开头,按下Ctrl-D,就代表EOF(如果在一行的中间按下Ctrl-D,则表示输出"标准输入"的缓存区,所以这时必须按两次Ctrl-D);Windows中,Ctrl-Z表示EOF。(顺便提一句,Linux中按下Ctrl-Z,表示将该进程中断,在后台挂起,用fg命令可以重新切回到前台;按下Ctrl-C表示终止该进程。)
    
    

    EOF@维基百科

    EOF@阮一峰的网络日志

    这里还有一个梗,为什么按回车键即正常退出,而不抛出EOF异常或其他任何异常???

    为教材的举例增加一些调试代码

    #coding:utf-8
    cities = {'CA':'San Francisco', 'MI':'Detroit', 'FL':'Jacksonville'}
    
    
    cities['NY'] = 'New York'
    
    cities['OR'] = 'Portland'
    
    def find_city(themap, state):
      if state in themap:
        return themap[state]
      else:
        return "Not Found"
    
    cities['_find'] = find_city #关联一个函数地址到字典中
    
    while True:
      print "State? (Enter to quit)",
      state = raw_input("> ")
      print state              #打印输入的字符串
      print len(state)         #计算输入字符串长度
      print bool(state)        #判断输入的真值True or False
    
      if not state: break
    
      city_found = cities['_find'](cities, state)
      print city_found
    
    
    

    增加了按下回车键时,输出一些辅助信息

    从下面的链接中得知,linux系统中按下回车键相当于输入了'\n'实现回车换行操作。

    而raw_input函数读入标准输入时是抹掉换行符的,所以按下回车键被删掉换行符后,raw_input的返回为空

    执行程序,按下回车键,看打印信息

    damao@damao:~/Desktop$ python t.py
    State? (Enter to quit) >

    0
    False
    damao@damao:~/Desktop$

    可以看到字符串长度为0,真值测试为假

    上述输出的换行效果是print函数产生的,若去掉打印代码,直接按下回车键后,输出信息

    damao@damao:~/Desktop$ python t.py
    State? (Enter to quit) >
    damao@damao:~/Desktop$

    因此,按下回车键时没有抛出异常。

    关于回车换行

    相关文章

      网友评论

        本文标题:《笨办法学Python》笔记29-----字典,可爱的字典

        本文链接:https://www.haomeiwen.com/subject/bbqlrttx.html