一、介绍

dict 的用法比较简单,它可以存储任意值,并允许是不同类型的值,下面实例来说明:

下面例子中 a 是整数, b 是字符串, c 是数组,这个例子充分说明哈希数组的适用性。

每一个元素是pair,包含key、value两部分。key是Integer或string类型,value 是任意类型。

键是唯一的,字典只认最后一个赋的键值。

不允许同一个键出现两次。创建时如果同一个键被赋值两次

二、字典初始化

1、普通赋值方法

print("===="*5,"dict init")

dic1 = {'a': 100, 'b':'boy', 'c':['o', 'p', 'q']}

print(type(dic1))

print("dic1:",dic1)

#可以直接增加一个元素,如果同名,则会改变原来的key的元素的值

dic1['d'] = 'dog'

dic1['c'] = 111               # 更新 'c'

print("dic1:",dic1)

#键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行

dic2 = {'a': 1}

print ("dic2: ", dic2)

dic2 = {('a'): 1}

print ("dic2: ", dic2)

dic2 = {('a','b'): 1}

print ("dic2: ", dic2)

#dic2 = {['a']: 1}   #error

2、元组初始化方法

print("===="*5,"touple init")

tuple1 = ('name', 'age', 'sex')

dict1 = dict.fromkeys(tuple1)

print ("新的字典为 : %s" %  str(dict1))

dict1 = dict.fromkeys(tuple1, 10)

print ("新的字典为 : %s" %  str(dict1))

dict1 = dict.fromkeys(tuple1, [1,2,3])

print ("新的字典为 : %s" %  str(dict1))

三、字典的引用遍历合并

print("===="*5,"key and value")

dic1 = {'a':1,'b':2,'c':3}

#输出所有的key

print("keys:",dic1.keys())

print(type(dic1.keys()))

#输出所有的value

print("values:",dic1.values())

print(type(dic1.values()))

#同dict[key],多了个没有则返回缺省值,0。[]没有则抛异常

print(dic1.get('a',"don not find"))

print(dic1.get('z',"don not find"))

print(dic1.get('z'))

print('a' in dic1)

#遍历

for k in dic1:

print(dic1.get(k))

dic1 = {'a':1,'b':2,'c':3}

print ("a 键的值为 : %s" %  dic1.setdefault('a', 'ff'))

print ("d 键的值为 : %s" %  dic1.setdefault('d', 'ff'))

print ("新字典为:", dic1)

dic1 = {'a':1,'b':2,'c':3}

print (type(dic1.items()))

print ("Value : %s" %  dic1.items())

for i,j in dic1.items():

print(i, ":\t", j)

#计算字典元素个数,即键的总数

dic1 = {'a':1,'b':2,'c':3}

print("len:",len(dic1))

#输出字典,以可打印的字符串表示。

dic1 = {'a':1,'b':2,'c':3}

print("str:",str(dic1))

#增加合并字典

dic1 = {'a':1,'b':2,'c':3}

dic2 = {'d':4,'e':5,'f':6}

dic1.update(dic2)   #不可以使用加法

print("dic1:",dic1)

四、字典的浅复制

#返回一个字典的浅复制

print,ThinkMarkets返佣http://www.kaifx.cn/broker/thinkmarkets.html("===="*5,"copy")

dic1 = {'a':1,'b':[2,3,4],'c':3}

dic2 = dic1          # 浅拷贝: 引用对象

dic3 = dic1.copy()   # 浅拷贝: 深拷贝: 父对象(一级目录),子对象(二级目录)不拷贝,还是引用

# 修改 data 数据

dic1['a']=100

dic1['b'].remove(2)

# 输出结果

print(dic1)

print(dic2)

print(dic3)#存在浅拷贝

五、字典删除

#删除

print("===="*5,"del")

dic1 = {'a':1,'b':2,'c':3}

dic2 = {'d':4,'e':5,'f':6}

dic3 = {'g':7,'h':8,'i':9}

dic2.clear() #清空字典 后为空字典  还属于有定义状态  删除字典内所有元素

print("dic2:",dic2)

print(type(dic2.keys()))

del dic3['g']

print("dic3:",dic3)#删除dic后属于没有定义状态会报错

del dic3

#print("dic3:",dic3)#删除dic后属于没有定义状态会报错

dic1 = {'a':1,'b':2,'c':3}

pop_obj=dic1.popitem()

print(pop_obj)

print(dic1)

dic1 = {'a':1,'b':2,'c':3}

pop_obj=dic1.pop('a')

print(pop_obj)

print(dic1)

dic1 = {'a':1,'b':2,'c':3}

pop_obj=dic1.pop('d','none')

print(pop_obj)

print(dic1)

六、python dict内存使用

def write_data_to_dict(key,data):

将数据放入字典

if not data:

return []

d_dict[md5(key)] = data

if md5(key) in d_dict.keys():

d_dict.update(d_dict)

return d_dict[md5(key)]

def get_data_from_dict(key):

从字典中取出数据

if not key:

return []

if md5(key) in d_dict.keys():

return d_dict.setdefault(md5(key), {})

Python语法学习记录之tuple该如何使用?的更多相关文章

  1. python语法学习面向对象之继承

    python语法学习面向对象之继承 转载自:http://www.cnblogs.com/Joans/archive/2012/11/09/2757368.html 只要涉及到面向对象,”类“是必须出 ...

  2. 转 python语法学习面向对象之继承

    传送门 python语法学习面向对象之继承 只要涉及到面向对象,”类“是必须出现的一个代名词. 类和对象是面向对象编程的两个主要方面.类创建一个新类型,而对象是这个类的实例. 类的一些概念: 包括初始 ...

  3. python语法学习之函数、类、模块

    Python中通过使用类(class)和对象(object)来实现面向对象(object-oriented programming,简称OOP)的编程. 面向对象编程的最主要目的是提高程序的重复使用性 ...

  4. Python爬虫学习记录【内附代码、详细步骤】

    引言: 昨天在网易云课堂自学了<Python网络爬虫实战>,视频链接 老师讲的很清晰,跟着实践一遍就能掌握爬虫基础了,强烈推荐! 另外,在网上看到一位学友整理的课程记录,非常详细,可以优先 ...

  5. 简明 Python 教程--学习记录

    注意,我们在print语句的结尾使用了一个 逗号 来消除每个print语句自动打印的换行符.这样做有点难看,不过确实简单有效. print # prints a blank line 注意,没有返回值 ...

  6. python语法学习笔记

    函数的参数   定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来 ...

  7. python反序列化学习记录

    pickle与序列化和反序列化 官方文档 模块 pickle 实现了对一个 Python 对象结构的二进制序列化和反序列化. "pickling" 是将 Python 对象及其所拥 ...

  8. python爬虫学习记录

    爬虫基础 urllib,urllib2,re都是python自带的模块 urllib,urllib2区别是urllib2可以接受一个Request类的实例来设置url请求的headers,即可以模拟浏 ...

  9. python numpy学习记录

    numpy是一个python和矩阵相关的库,在机器学习中非常有用,记录下numpy的基本用法 numpy的数组类叫做ndarray也叫做数组,跟python标准库中的array.array不同,后者只 ...

随机推荐

  1. segment fault 定位 与 远程 gdb

    远程 GDB  首先 ,Target 为 ARM开发板 (IP =  192.168.1.200),HOST 为 Ubuntu 14.04 虚拟机 (IP = 192.168.1.4) 1. 下载  ...

  2. MOS管知识大集

    MOS管 增强型:就是UGS=0V时漏源极之间没有导电沟道,只有当UGS>开启电压(N沟道)或UGS<开启电压(P沟道)才可能出现导电沟道.耗尽型:就是UGS=0V时,漏源极之间存在导电沟 ...

  3. 使用eclipse开发java web网页

    前面说了手动配置一个应用,手动配置可以更深入的理解web应用的分布,但是一般的编辑器没有语法错误提示,所以开发起来对于错误的寻找不太容易,效率相对较低,所以在理解清楚web项目的结构之后,我们使用ec ...

  4. CSV (逗号分隔值文件格式)

    逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本).纯文本意味着该文件是一个字符序列,不 ...

  5. Vue学习笔记【18】——Vue中的动画(使用过渡类名)

    为什么要有动画:动画能够提高用户的体验,帮助用户更好的理解页面中的功能: 使用过渡类名 步骤分析  需求: 点击按钮,让 h3 显示,再点击,让 h3 隐藏  1. 使用 transition 元素, ...

  6. gensim中TaggedDocument 怎么使用

    我有两个目录,我想从中读取它们的文本文件并给它们贴上标签,但我不知道如何通过taggedDocument来实现这一点.我以为它可以作为标记文档([strings],[labels])工作,但这显然不起 ...

  7. [Catalan数三连]网格&有趣的数列&树屋阶梯

    如何让孩子爱上打表 Catalan数 Catalan数是组合数学中一个常出现在各种计数问题中的数列. 以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)的名字来命名. 先丢个公式(设第n项为$ ...

  8. 51nod 1437 迈克步——单调栈

    有n只熊.他们站成一排队伍,从左到右依次1到n编号.第i只熊的高度是ai. 一组熊指的队伍中连续的一个子段.组的大小就是熊的数目.而组的力量就是这一组熊中最小的高度. 迈克想知道对于所有的组大小为x( ...

  9. Ubuntu下安装Samba服务器

    闲来无聊尝试自己安装下Samba服务器,使本机和虚拟机可以无障碍传输文件(虽然用VMwaretools可传,但总感觉麻烦,而且速度欠佳) 首先,同安装qemu一样,在安装之前要确定你的系统apt列表已 ...

  10. 关于ios 的耳机线线控

    如题 线控主要就是指的用ios耳机的  中间那个键来自定义一些程序自己的事件(比如玩吃鸡的时候,作为开枪扳机) 而想要控制耳机的音量加减的事件, 有一种方法,就是监听 系统音量的变化,根据音量变化来触 ...