一、介绍

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. webpack 集成 Typescript && Less

    webpack 集成 Typescript && Less TypeScript是JavaScript的一个类型化的超集,可以编译成纯JavaScript,在本指南中,我们将学习如何将 ...

  2. usb需要做的工作

    1. QStringList qlist = var2.split('&', QString::SkipEmptyParts); if (qlist.size() >= 2) { usb ...

  3. 【Luogu】【关卡2-2】交叉模拟(2017年10月)

    任务说明:这里也是模拟,但是会混有些别的部分.思维难度不大,但是编写起来会有些难度.

  4. 40th 要掀桌子么 还是尬坐吧

    今日学习精华:     面向对象编程里面有一句  非常经典的描述:-----通过类实例化一个对象,通过对象调方法-----   注意:对象调用的  方法 ,即 函数一定要有  参数      def  ...

  5. React Native 安卓模拟器调出Dev Setting

    Android Studio 模拟器调出Dev Setting 实现热更新 cmd进入项目目录 F:\study\AwesomeProject> 执行 adb shell input keyev ...

  6. 【错误总结】Component template should contain exactly one root element. If you are using v-if on multiple elements, use v-else-if to chain them instead.

    大致意思是因为模板里面应该包含一个根元素,使用组件的时候应该用div或p标签包起来

  7. java输入一个整数N,打印1~n位数

    举个栗子:输入 3 : 打印1,2,3......999 这里要注意一个坑,不可以直接算出最大的数,然后从1开始打印 .因为当n足够大时,n位数必定会超出int范围和long范围 所以我们需要用字符串 ...

  8. Java——抽象:abstract

    3.4抽象:abstract 3.4.1什么是抽象类? 随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用.类的设计应该保证父类和子类能够共享特征.有时将一个父类设计得非常抽象 ...

  9. 完爆 Best Fit,看阿里如何优化 Sigma 在线调度策略节约亿级成本

    摘要:2018 年“双 11”的交易额又达到了一个历史新高度 2135 亿.相比十年前,我们的交易额增长了 360 多倍,而交易峰值增长了 1200 多倍.相对应的,系统数呈现爆发式增长.系统在支撑“ ...

  10. (转)XMPP协议原理

    本文介绍XMPP协议原理及相关信息. XMPP协议简介   XMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)是目前主流的四种IM ...