首页 > 代码库 > 云课堂-Python学习笔记(7)

云课堂-Python学习笔记(7)

一、字典

  1、什么是字典

    1、一系列键-值(key-value)对
    2、通过“键”查找对应的“值”
    3、类似纸质字典,通过单词索引表找到其对应的定义
      C++:map、Java:HashTable or HashMap
      例如:电话本

  2、创建字典

    使用{}创建字典

    使用:指明键:值对
      my_dict={‘John‘:86411234,‘Bob‘:24896880,‘Mike‘:354859977}

3、访问字典
使用[]运算符,键作为索引
增加一个新的对

1 my_dict={John:86411234,Bob:24896880,Mike:354859977}2 print my_dict[John]3 my_dict[Tom] = 98644336794 print my_dict

4、字典运算符和方法

1 len(my_dict):字典中键-值对的数量2 key in my_dict:快速判断key是否为字典中的键:时间复杂度O(1)3 等价于my_dict.has_key(key)4 for key in my_dict:枚举字典中的键,注:键是无序的

更多方法:

1 my_dict.items():全部键-值对2 my_dict.keys():全部键3 my_dict.values():全部值4 my_dict.clear():清空字典

  5、示例1:读取一个字符串,计算每个字母出现的个数

  方案一:生成26个变量,代表字母出现的个数

      方案二:生成具有26个元素的列表,将每个字母转化为对象的索引值

1 s = abdddeyyyrewgq2 lst = [0]*263 for i in s :4     lst[ord(i)-97] +=15     6 print lst

  方案三:生成一个字典,字母做键,对应出现的次数做值

s = raw_input()d ={}for i in s :    if i in d:        d[i] += 1    else:        d[i] = 1    print d

  示例2:读取小说emma.txt,打印前10个最常见的单词

技术分享
 1 f= open(emma.txt) 2 word_freq = {} 3 for line in f: 4     words = line.strip().split() 5     for word in words: 6         if word in word_freq: 7             word_freq[word] += 1 8         else: 9             word_freq[word] = 110             11 freq_word = []12 for word,freq in word_freq.items():13     freq_word.append((freq,word))14 freq_word.sort(reverse = True)15 16 for freq,word in freq_word[:10]:17     print word18 f.close()
View Code

  示例3:翻转字典:生成一个新字典,其键为原来字典的值,值为原来字典的键

技术分享
1 d1 = {zhang:123,wang:456,Li:123,zhao:456}2 d2 = {}3 for name,room in d1.items():4     if room in d2:5         d2[room].append(name)6     else :7         d2[room] = [name]8 print d2
View Code

二、集合(set) 

  1、集合:无序不重复元素集,和字典类似,但是无值
  2、创建:
    x = set()
    x={key1,key2,....}
  3、添加和删除
    x.add(‘body‘
    x.remove(‘body‘)
  4、集合的运算符:
    -:差集
    &:交集
    |:并集
    !=:不等于
    ==:等于
    in:成员
    for key in set :枚举
  5、示例:中文分词
    我/爱/北京/天安门
    算法:正向最大匹配
      从左到右尽可能取长的词

技术分享
 1 def load_dict(filename): 2     word_dict = set() 3     max_len = 1 4     f = open(filename) 5     for line in f: 6         word = unicode(line.strip(),utf-8) 7         word_dict.add(word) 8         if len(word) > max_len: 9             max_len = len(word)10     return max_len,word_dict11 12 def fmm_word_seg(sent,max_len,word_dict):13     begin = 014     words = []15     sent = unicode(sent,utf-8)16     17     while begin < len(sent):18         for end in range(begin + max_len,begin,-1):19             if sent[begin:end] in word_dict:20                 words.append(sent[begin:end])21                 break22             begin = end23     return words24 max_len,word_dict = load_dict(lexicon.dic)25 26 sent = raw_input(Input a sententce:)27 words = fmm_word_seg(sent,max_len,word_dict)28 for word in words:29     print word
View Code

 

云课堂-Python学习笔记(7)