码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-01-13 17:25:33      阅读:309      评论:0      收藏:0      [点我收藏+]

标签:

一、字典

  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] = 9864433679
4 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 = abdddeyyyrewgq
2 lst = [0]*26
3 for i in s :
4     lst[ord(i)-97] +=1
5     
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] = 1
10             
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 word
18 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_dict
11 
12 def fmm_word_seg(sent,max_len,word_dict):
13     begin = 0
14     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                 break
22             begin = end
23     return words
24 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)

标签:

原文地址:http://www.cnblogs.com/weidandan/p/4221651.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!