python 基础之第八天--字典相关
zx
#####################创建字典######################################
In [11]: dict([('name','bob'),('age',23),['qq',123456]])
Out[11]: {'age': 23, 'name': 'bob', 'qq': 123456} In [12]: dict((('name','bob'),('age',23),['qq',123456])) ##dict函数
Out[12]: {'age': 23, 'name': 'bob', 'qq': 123456} In [13]: aDict = {'name':'bob','age':23,'qq':123456} ##{}方式 In [14]: aDict
Out[14]: {'age': 23, 'name': 'bob', 'qq': 123456}
In [20]: {}.fromkeys(['bob','herry','jerry'],7) ##不同的key,相同的值,‘7’为值value
Out[20]: {'bob': 7, 'herry': 7, 'jerry': 7}
############关于循环字典取值###############
In [22]: for key in aDict: ##默认只取key
....: print key
....:
age
name In [23]: for key in aDict: ##key与value一起取
print '%s-->%s' % (key,aDict[key])
....:
qq-->123456
age-->23
name-->bob
#########特殊格式输出################
In [36]: aDict
Out[36]: {'age': 23, 'name': 'bob', 'qq': 123456} In [37]: '%(name)s --> %(age)s' % aDict
Out[37]: 'bob --> 23'
##############删除(不常用),弹出与清空#############
#######aDict.pop##########
In [39]: aDict
Out[39]: {'age': 23, 'name': 'bob', 'qq': 123456} In [41]: aDict.pop('age') ###因为字典是无序的,所以需要指名pop哪个key
Out[41]: 23 In [42]: aDict
Out[42]: {'name': 'bob', 'qq': 123456}
In [43]: aDict.popitem() ###popitem()是随机弹的,几乎用不到,括号内不接受参数
Out[43]: ('qq', 123456)
In [46]: uu = aDict.copy() #复制字典
In [47]: uu
Out[47]: {'name': 'bob'}
In [48]: uu.clear() ###清空字典
In [49]: uu
Out[49]: {}
##########字典的in 与not in #############
In [63]: aDict
Out[63]: {'age': 23, 'name': 'herry'} In [64]: 'age' in aDict ###通过key查看是否在字典中,而不是value
Out[64]: True
#############字典长度##############
In [63]: aDict
Out[63]: {'age': 23, 'name': 'herry'} In [66]: len(aDict)
Out[66]: 2
###########判断是否可以作为字典的key##########
In [67]: hash('naem')
Out[67]: -4166578487153698939 In [68]: hash(20)
Out[68]: 20 In [69]: hash((10,30))
Out[69]: 3713074054223687331 In [70]: hash([10,30])
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-70-2766bfecf01d> in <module>()
----> 1 hash([10,30]) TypeError: unhashable type: 'list' 总结:通过hash函数,如果不报错,就是可以作为字典的key,我们会发现key都是不可变对象
#############字典的拷贝################
In [71]: aDict
Out[71]: {'age': 23, 'name': 'herry'} In [72]: bDict = aDict.copy() In [73]: bDict
Out[73]: {'age': 23, 'name': 'herry'} In [74]: aDict
Out[74]: {'age': 23, 'name': 'herry'} In [75]: id(aDict)
Out[75]: 45174528 In [76]: id(bDict)
Out[76]: 45199760
###########字典的get 用法(常用)############
In [71]: aDict
Out[71]: {'age': 23, 'name': 'herry'} In [77]: aDict.get('age') ###get key为‘age’ 的值23
Out[77]: 23 In [78]: aDict.get('qq') ###get 不存在的key,返回值None In [79]: print aDict.get('qq')
None In [80]: aDict.get('qq','not found') ########自定义,如果get 的key存在,则返回对应的值,不存在则返回我们定义的值,这边是‘not found’
Out[80]: 'not found' In [81]: aDict.get('age','not found')
Out[81]: 23 In [82]: aDict.get('name','not found')
Out[82]: 'herry' 备注:
In [83]: help(aDict.get)
Help on built-in function get:
get(...)
D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.
In [90]: aDict.setdefault('age',33) ####setdefault key,存在,则返回相对应的值,不存在则增加key-value
Out[90]: 20 In [91]: aDict
Out[91]: {'age': 20, 'name': 'herry'} In [92]: aDict.setdefault('qq',333333)
Out[92]: 333333 In [93]: aDict
Out[93]: {'age': 20, 'name': 'herry', 'qq': 333333} In [94]: help(aDict.setdefault)
Help on built-in function setdefault: setdefault(...)
D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D
##########################################################
In [100]: aDict
Out[100]: {'age': 20, 'name': 'herry', 'qq': 333333} In [96]: aDict.keys()
Out[96]: ['qq', 'age', 'name'] In [97]: aDict.values()
Out[97]: [333333, 20, 'herry'] In [98]: aDict.items()
Out[98]: [('qq', 333333), ('age', 20), ('name', 'herry')]
实战案例:
################################################################
[root@master script]# cat info.py
#!/usr/bin/python
# coding:utf-8 user_dic = {'fush':123} def register():
username = raw_input('请输入你的注册用户名: ')
password = raw_input('请输入你的注册密码:')
user_dic.setdefault(username,password)
print user_dic
def login():
username = raw_input('请输入你的用户名: ')
while True:
password = raw_input('请输入你的密码:')
pwd = user_dic.get(username)
if str(pwd) == password:
print '登录系统成功!'
break
else:
print '你输入的密码不正确,请重新输入' def show_menu():
CMDs = {'':register,'':login}
username = raw_input('请输入你的用户名: ')
str_value = user_dic.get(username,'not found')
if str_value == 'not found':
print '%s用户名不存在,请输入数字1注册' % username
else:
print '%s用户名已存在,可直接输入数字2登录系统' % username
while True:
prompt = """(1)注册用户
(2)登录系统
(3)退出
请输入的你的选择(1/2/3):"""
choice = raw_input(prompt)
if choice == '':
break
CMDs[choice]()
if __name__ == '__main__':
show_menu()
###############生成器表达式(与列表解析类似)###############
In [19]: [i ** 2 for i in range(1,11)]
Out[19]: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] In [20]: [i ** 2 for i in range(1,11) if i%2]
Out[20]: [1, 9, 25, 49, 81] In [21]: [i ** 2 for i in range(1,11) if i % 2]
Out[21]: [1, 9, 25, 49, 81] In [22]: [i ** 2 for i in range(1,11) if not i % 2]
Out[22]: [4, 16, 36, 64, 100] In [23]: (i ** 2 for i in range(1,11) if not i % 2)
Out[23]: <generator object <genexpr> at 0x16459b0> In [24]: a = (i ** 2 for i in range(1,11) if not i % 2)
案例:打印出一副扑克牌
puke = ['%s_%s' % (color,i) for color in ('Red','Cube','Black','Flower') for i in (range(2,11) + ['A','J','K','Q'])] 结果:
['Red_2',
'Red_3',
'Red_4',
'Red_5',
'Red_6',
'Red_7',
'Red_8',
'Red_9',
'Red_10',
'Red_A',
'Red_J',
'Red_K',
'Red_Q',
'Cube_2',
'Cube_3',
'Cube_4',
'Cube_5',
'Cube_6',
'Cube_7',
'Cube_8',
'Cube_9',
'Cube_10',
'Cube_A',
'Cube_J',
'Cube_K',
'Cube_Q',
'Black_2',
'Black_3',
'Black_4',
'Black_5',
'Black_6',
'Black_7',
'Black_8',
'Black_9',
'Black_10',
'Black_A',
'Black_J',
'Black_K',
'Black_Q',
'Flower_2',
'Flower_3',
'Flower_4',
'Flower_5',
'Flower_6',
'Flower_7',
'Flower_8',
'Flower_9',
'Flower_10',
'Flower_A',
'Flower_J',
'Flower_K',
'Flower_Q'] In [52]: import random
In [50]: random.shuffle(puke) #########将扑克牌随机打乱(洗牌)
三个人打牌:
In [52]: random.shuffle(puke)
In [53]: a = puke[::3]
In [54]: a
Out[54]:
['Red_3',
'Cube_9',
'Black_Q',
'Black_5',
'Cube_J',
'Flower_6',
'Flower_K',
'Red_Q',
'Red_5',
'Cube_2',
'Cube_4',
'Flower_8',
'Flower_9',
'Red_A',
'Red_6',
'Cube_6',
'Flower_5',
'Black_7']
In [55]: b = puke[1::3]
In [56]: b
Out[56]:
['Cube_3',
'Cube_A',
'Cube_5',
'Black_A',
'Black_9',
'Flower_10',
'Red_10',
'Cube_K',
'Flower_2',
'Black_J',
'Flower_7',
'Cube_7',
'Black_2',
'Black_8',
'Cube_8',
'Black_3',
'Black_K']
In [57]: c = puke[2::3]
In [58]: c
Out[58]:
['Black_10',
'Red_9',
'Black_6',
'Cube_Q',
'Flower_J',
'Red_2',
'Red_K',
'Red_8',
'Flower_A',
'Red_4',
'Red_J',
'Flower_3',
'Flower_Q',
'Red_7',
'Cube_10',
'Black_4',
'Flower_4']
###########文件的输入输出#########################
#################标准文件的输入与输出################
#############os模块#####################
In [19]: import os In [20]: import shutil In [21]: os.chdir('/home') ###相当于shell 的cd 命令 In [25]: os.mkdir('demo') ###相当于shell 的mkdir 命令 In [23]: os.getcwd() ###相当于shell 的pwd 命令
Out[23]: '/home' In [29]: os.listdir('.') ###相当于shell 的ls 命令
Out[29]: ['herry', 'honey', 'tiantian', 'fush', 'jerry', 'master'] In [30]: os.mknod('fush.txt') ###创建一个新文件,相当于shell 的touch
In [41]: os.chmod('/home/11111.txt',0777) ##修改文件权限,前面需要加0,加0是八进制数,十六进制是0x,二进制是0b
In [42]: os.symlink('/etc/passwd','mima') ##创建软链接,将‘/etc/passwd’ 链接到‘mima’
[root@master home]# ll
lrwxrwxrwx 1 root root 11 Aug 14 15:40 mima -> /etc/passwd
In [50]: os.rmdir('/home/tiantian/') ##不能删除非空目录,使用shutil.rmtree('/home/tiantian/')
In [52]: shutil.copy('/etc/hosts','/home/') ###复制文件
##########os.path.操作###############
In [55]: os.path.dirname('/home/master/script/ip.py') ##查看上一层目录
Out[55]: '/home/master/script' In [63]: os.path.split('/home/master/script/ip.py') ##切割
Out[63]: ('/home/master/script', 'ip.py') In [64]: os.path.basename('/home/master/script/ip.py') ##取得文件名
Out[64]: 'ip.py' In [65]: os.path.join('/home/master/script/','ip.py') ##拼接目录与文件
Out[65]: '/home/master/script/ip.py' In [66]: os.path.splitext('/home/master/script/ip.py') ###获取点后面扩展名
Out[66]: ('/home/master/script/ip', '.py') In [72]: os.path.abspath('info.py') ##得到文件的绝对路劲
Out[72]: '/home/master/script/info.py'
#############cPickle模块###################
语句例子:
In [83]: import cPickle as p #写入 In [84]: f = open('demo.txt','w') In [85]: p.dump({'name':'bob','age':22},f) In [86]: f.close() In [87]: f = open('demo.txt') #打开读取 In [88]: aDict = p.load(f) In [89]: aDict
Out[89]: {'age': 22, 'name': 'bob'}
#################匿名函数##################
lambda:
In [96]: a = lambda x,y :x+y ###格式: lambda 参数:表达式 In [97]: a(10,20)
Out[97]: 30
python 基础之第八天--字典相关的更多相关文章
- python基础一数据类型之字典
摘要: python基础一数据类型之一字典,这篇主要讲字典. 1,定义字典 2,字典的基础知识 3,字典的方法 1,定义字典 1,定义1个空字典 dict1 = {} 2,定义字典 dict1 = d ...
- Day2 - Python基础2 列表、字典、集合
Python之路,Day2 - Python基础2 本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一, ...
- python基础之列表、字典、元祖等 (二)
一.作用域 if 1==1: name = 'weibinf' print name 下面的结论对吗? 外层变量,可以被内层变量使用 内层变量,无法被外层变量使用 二.三元运算 result = 值1 ...
- python 字符串、列表、字典相关内建方法
"""字符串相关内建方法""" # a = ["qwe", "name", "sex&qu ...
- python基础知识梳理----5dict 字典的应用
内容简介: 1:字典简介 2:字典的增删该查 3:字典嵌套 1: 字典(dict)是python中唯一的一个映射类型.他是以{ }括起来的键值对组成. 在dict中key是唯一的. 在保存的时候, 根 ...
- Python基础(3) - 数据类型:5字典类型
Python Dictionary 是 Python 的内置数据类型之一, 它定义了键和值之间一对一的关系 .它是用{}括起来的.每个Dictionary的项的句法为:key:value. Dicti ...
- python基础之五:dict 字典
1.数据类型的划分:可变数据类型.不可变数据类型 不可变的有:元组(tuple).字符(str).整型(int).布尔型(bool) 它们都可以哈希 可变的:列表(list).set.字典(dict) ...
- Python基础:映射(字典)
一.概述 映射类型(Mapping Types)是一种关联式的容器类型,它存储了对象与对象之间的映射关系. 字典(dict)是Python中唯一的映射类型,它是存储了一个个 键值对(由 键 映射到 值 ...
- Python基础(5)--字典
字典由多个键及与其对应的值构成的对组成(把键值对成为项),每个键和它的值之间用冒号(:)隔开,项之间用逗号(,)隔开,而整个字典由一对大括号括起来.空字典由两个大括号组成:{} 本文地址:http:/ ...
随机推荐
- android的窗口机制分析------UI管理系统
Activity可以看做是整个Android系统的人机接口,它提供了一个窗口来绘制UI,每个Activity在启动时,我们都需要给它设置一个Content view,作为Activity所呈现的UI内 ...
- PS 抠图如何使用通道法处理头发
通道抠图法抠出美女飘逸头发-PS抠图实例教程 抠图更换背景后效果图 通道抠图法抠出美女飘逸头发-PS抠图实例教程 教程步骤: 1 打开原图,进入通道面板. 通道抠图法抠出美女飘逸头发-PS抠图实 ...
- android页面间传递对象
android传递对象有两种方式: 一种是Serializable和Parcelable 对于第一种方式: import java.io.Serializable; public class Shop ...
- [转] git clone 远程分支
git clone只能clone远程库的master分支,无法clone所有分支,解决办法如下: 找一个干净目录,假设是git_work cd git_work git clone http://my ...
- 【Android Studio探索之路系列】之十:Gradle项目构建系统(四):Android Studio项目多渠道打包
作者:郭孝星 微博:郭孝星的新浪微博 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.co ...
- beifen---http://vdisk.weibo.com/s/uhCtnyUhD0Ooc
- mysql导入数据库_仅仅用frm向mysql导入表结构
网上一个连接mysql的jsp代码段,给了数据库的备份文件.可是仅仅有frm, mysql的每张表有三个文件.各自是,*.frm是描写叙述了表的结构.*.MYD保存了表的数据记录.*.MYI则是表的索 ...
- EOF需要两次才能结束输入
.EOF作为文件结束符时的情况: EOF虽然是文件结束符,但并不是在任何情况下输入Ctrl+D(Windows下Ctrl+Z)都能够实现文件结束的功能,只有在下列的条件下,才作为文件结束符.(1)遇 ...
- 网络协议之rtp---h264的rtp网络协议实现
完整的C/S架构的基于RTP/RTCP的H.264视频传输方案.此方案中,在服务器端和客户端分别进行了功能模块设计.服务器端:RTP封装模块主要是对H.264码流进行打包封装:RTCP分析模块负责产牛 ...
- 嵌入式开发之cgic库---cgi库的使用
很幸运!用C语言写CGI程序还可以有比较简单的方式,那就是我们可以借助使用第三方库CGIC(CGIC是一个功能比较强大的支持CGI开发的标准C库,并支持Linux, Unix 和Windows等多操作 ...