资讯专栏INFORMATION COLUMN

python-数据类型之字典

SmallBoyO / 2236人阅读

摘要:删除字典元素和字典删除键为的条目删除中所有的条目删除整个字典删除并返回键为的条目二字典相关函数工厂方法工厂函数被用来创建字典。与函数方法相似,如果字典中键存在,删除并返回,如果键不存在,且没有给出的值,引发异常。

Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。
一、创建字典
(一)字典的增删改查
(1)字典的创建
key:(不可变类型)数字、字符串、元组
value:任何类型

</>复制代码

  1. >>> dict1={}
  2. >>> dict2={"name": "earth", "port": 80}
  3. >>> dic1,dict2
  4. ({}, {"name": "earth", "port": 80})

如果键值是列表,会报错

</>复制代码

  1. >>>dict1[[1,2]]={"aa","bbb"}
  2. Traceback (most recent call last):
  3. File "", line 1, in
  4. TypeError: unhashable type: "list"

键为元组:

</>复制代码

  1. >>> dict1[1,2]={"sss","ggg"}
  2. >>> dict1
  3. {(1, 2): set(["ggg", "sss"]), "name": "aileen", "sex": u"u5973"}

用工厂的方法创建字典:

</>复制代码

  1. >>> fdict = dict((["x", 1], ["y", 2]))
  2. >>> fdict
  3. {"y": 2, "x": 1}
  4. >>> fdict=dict(a=3,b=4) #这个比较常用
  5. >>> fdict
  6. {"a": 3, "b": 4}

内建方法 fromkeys() 来创建一个"默认"字典:
dict.fromkeys(seq[, value]))
seq -- 字典键值列表。
value -- 可选参数, 设置键序列(seq)的值。

</>复制代码

  1. >>> ddict = {}.fromkeys(("x", "y"), -1)
  2. >>> ddict
  3. {"y": -1, "x": -1}
  4. >>> edict = {}.fromkeys(("foo", "bar"))
  5. >>> edict
  6. {"foo": None, "bar": None}

(2)访问字典的值:字典是无序的所以不能用索引进行访问

</>复制代码

  1. >>> dict2 = {"name": "earth", "port": 80}
  2. >>> for key in dict2.keys():
  3. ... print "key=%s,value=%s"%(key,dict2[key])
  4. key=name,value=earth
  5. key=port,value=80
  6. >>> for key,value in dict2.items():
  7. ... print key,value
  8. name earth
  9. port 80
  10. >>> for value in dict2.values():
  11. ... print value
  12. earth
  13. 80

想访问该字典中的一个数据元素,而它在这个字典中没有对应的键,将会产生一个错误:

</>复制代码

  1. >>> dict2["sever"]
  2. Traceback (most recent call last):
  3. File "", line 1, in
  4. KeyError: "sever"

字典的方法:has_key()和 in 以及 not in 操作符都是布尔类型的。
对于前两者而言,如果字典中有该键就返回真(True),否则返回假(False)。

</>复制代码

  1. >>> "sever" in dict2 #dict2.has_key("server")
  2. False
  3. >>> "name" in dict2 #dict2.has_key("name")
  4. True
  5. >>> "earth" in dict2.values()
  6. True

(3)字典的更新
通过以下几种方式对一个字典做修改:添加一个新数据项或新元素(即:一个键-值对);修改一个已存在的数据项;或删除一个已存在的数据项

</>复制代码

  1. >>> dict2["name"] = "venus" #更新已有的条目
  2. >>> dict2["port"] = 6969 #更新已有的条目
  3. >>> dict2["arch"] = "sunos5" #增加新条目
  4. >>> print "host %(name)s is running on port %(port)d"%dict2
  5. host venus is running on port 6969

注:(1)如果字典中该键已经存在,则字典中该键对应的值将被新值替代。
(2)上面的 print 语句展示了另一种在字典中使用字符串格式符( %)的方法。用字典参数可以简化 print 语句,因为这样做你只须用到一次该字典的名字,而不用在每个元素出现的时候都用元组参数表示。

(4)删除字典元素和字典

</>复制代码

  1. >>> del dict2["name"] #删除键为”name”的条目
  2. >>> dict2.clear() #删除dict2中所有的条目
  3. >>> del dict2 #删除整个dict2字典
  4. >>> dict2.pop("name") #删除并返回键为”name”的条目

(二)字典相关函数
(1)dict()-工厂方法
工厂函数被用来创建字典。如果不提供参数,会生成空字典

</>复制代码

  1. >>> dict(zip(("x", "y"), (1, 2)))
  2. {"y": 2, "x": 1}
  3. >>> dict([["x", 1], ["y", 2]])
  4. {"y": 2, "x": 1}
  5. >>> dict([("xy"[i-1], i) for i in range(1,3)])
  6. {"y": 2, "x": 1}

调用 dict()方法可以接受字典或关键字参数字典

</>复制代码

  1. >>> dict8=dict(x=1,y=2)
  2. >>> dict8
  3. {"y": 2, "x": 1}
  4. >>> dict9=dict(**dict8) #只作为了解 dict()方法的用途
  5. >>> dict9
  6. {"y": 2, "x": 1}
  7. >>> dict9=dict8.copy() #此方法效率更好
  8. >>> dict9
  9. {"y": 2, "x": 1}

注:copy:dict3、dict2内存不同,改变一个另外一个不变

</>复制代码

  1. >>> dict3=dict2.copy()
  2. >>> dict3
  3. {"1": 1, "3": 3, "2": 2}
  4. >>> dict3["1"]=4
  5. >>> dict2
  6. {"1": 1, "3": 3, "2": 2}
  7. >>> id(dict3)
  8. 4323369880
  9. >>> id(dict2)
  10. 4323370160
  11. >>> id(dict2)
  12. 4323370160

引用,修改了一个另一个也改了

</>复制代码

  1. >>> dict4=dict2
  2. >>> id(dict4)
  3. 4323370160
  4. >>> id(dict2)
  5. 4323370160

(2)len()
对字典调用 len(),它会返回所有元素(键-值对)的数目

</>复制代码

  1. >>> dict2 = {"name": "earth", "port": 80}
  2. >>> len(dict2)
  3. 2

(3)hash():
判断某个对象是否可以做一个字典的键,如果非可哈希类型作为参数传递给 hash()方法,会产生TypeError 错误.返回的是返回 obj 的哈希值

</>复制代码

  1. >>> hash(3)
  2. 3
  3. >>> hash([])
  4. Traceback (most recent call last):
  5. File "", line 1, in
  6. TypeError: unhashable type: "list"
  7. >>> dict2[{}]="foo"
  8. Traceback (most recent call last):
  9. File "", line 1, in
  10. TypeError: unhashable type: "dict"

(4)update函数
可以用来将一个字典的内容添加到另外一个字典中,字典中原有的键如果与新添加的键重复,那么重复键所对应的原有条目的值将被新键所对应的值所覆盖。原来不存在的条目则被添加到字典中。

</>复制代码

  1. >>> dict2= {"host":"earth", "port":80}
  2. >>> dict3= {"host":"venus", "server":"http"}
  3. >>> dict2.update(dict3)
  4. >>> dict2
  5. {"host": "venus", "port": 80, "server": "http"}
  6. >>> dict2.update({"ip":"192.168.1.1"})
  7. >>> dict2
  8. {"ip": "192.168.1.1", "host": "venus", "port": 80, "server": "http"}

(5)get()方法
get方法与键查找(key-lookup)操作符( [ ] )相似,不同的是它允许你为不存在的
键提供默认值。如果该键不存在,也未给出它的默认值,则返回 None。此方法比采用键查找(key-lookup)更灵活,因为你不必担心因键不存在而引发异常。
dict的get方法:

</>复制代码

  1. >>> dict2
  2. {"ip": "192.168.1.1", "host": "venus", "port": 80, "server": "http"}
  3. >>> dict2.get("host")
  4. "venus"
  5. >>> dict2.get("XXX")
  6. >>> type(dict2.get("XXX"))
  7. >>> dict2.get("XXX","no such key")
  8. "no such key"

(6)Setdefault
检查字典中是否含有某键。 如果字典中这个键存在,你可以取到它的值。 如果所找的键在字典中不存在,你可以给这个键赋默认值并返回此值。

</>复制代码

  1. >>> myDict = {"host": "earth", "port": 80}
  2. >>> myDict.keys()
  3. ["host", "port"]
  4. >>> myDict.items()
  5. [("host", "earth"), ("port", 80)]
  6. >>> myDict.setdefault("port",8080)
  7. 80
  8. >>> myDict.setdefault("pot","tcp")
  9. "tcp"
  10. >>> myDict.items()
  11. [("host", "earth"), ("port", 80), ("pot", "tcp")]

(7)Fromkeys(seq,value=None)
创建并返回一个新字典,以 seq 中的元素做该字典的键,val 做该字典中所有键对应的初始值(如果不提供此值,则默认为 None)

</>复制代码

  1. >>> {}.fromkeys("xyz")
  2. {"y": None, "x": None, "z": None}
  3. >>> {}.fromkeys(("love", "honor"), True)
  4. {"love": True, "honor": True}

(8)Sorted()

</>复制代码

  1. dic = {"a":31, "bc":5, "c":3, "asd":4, "33":56, "d":0}
  2. print sorted(dic.iteritems(), key=lambda d:d[0], reverse = False )

按照value 排序:

</>复制代码

  1. dic = {"a":31, "bc":5, "c":3, "asd":4, "33":56, "d":0}
  2. print sorted(dic.iteritems(), key=lambda d:d[1], reverse = False )

可以用以下方法做

</>复制代码

  1. >>> d={3:13,2:12,1:21}
  2. >>> sorted_key=sorted(d.keys())
  3. >>> for i in sorted_key:
  4. ...     print "%s =%s " %(i,d[i])

(9)dict.iter()
方法 iteritems(), iterkeys(), itervalues()与它们对应的非迭代方法一样,不同的是它们返回一个迭代器,而不是一个列表。

(10)dict.pop(key[, default]) 与popitem函数
方法 get()相似,如果字典中 key 键存在,删除并返回 dict[key],
如果 key 键不存在,且没有给出 default 的值,引发 KeyError 异常。

</>复制代码

  1. >>> myDict
  2. {"host": "earth", "port": 80, "pot": "tcp"}
  3. >>> myDict.pop("host") #pop
  4. "earth"
  5. >>> myDict.pop("hostt","none")
  6. "none"
  7. >>> myDict.pop("hostt")
  8. Traceback (most recent call last):
  9. File "", line 1, in
  10. KeyError: "hostt"
  11. >>> myDict.popitem() #popitem
  12. ("host", "earth")
  13. >>> myDict.popitem()
  14. ("port", 80)
  15. >>> myDict.popitem()
  16. ("pot", "tcp")
  17. >>> myDict.popitem()
  18. Traceback (most recent call last):
  19. File "", line 1, in
  20. KeyError: "popitem(): dictionary is empty"

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40896.html

相关文章

  • Python基础(三)字典

    摘要:这种数据结构包含以下几种常见的操作向关联数组添加键值对从关联数组内删除键值对修改关联数组内的键值对根据已知的键寻找值字典问题是设计一种能够具备关联数组特性的数据结构。 定义 Python中有一个叫作dictionary的对象类型,翻译过来就是字典,用dict表示。 创建字典 创建空的字典 >>> mydict = {} >>> mydict {} >>> type(mydict) >...

    snifes 评论0 收藏0
  • Python全栈路系列字典数据类型

    摘要:字典在基本的数据类型中使用频率也是相当高的,而且它的访问方式是通过键来获取到对应的值,当然存储的方式也是键值对了,属于可变类型。 字典(dict)在基本的数据类型中使用频率也是相当高的,而且它的访问方式是通过键来获取到对应的值,当然存储的方式也是键值对了,属于可变类型。 创建字典的两种方式 第一种 >>> dic = {k1:123,k2:456} >>> dic {k1: 123, ...

    caoym 评论0 收藏0
  • Python 3 学习笔记——数据类型

    摘要:常量的值近似为。在后传入一个整数可以保证该域至少有这么多的宽度表示浮点数保留位小数常量的值近似为。 1. 数字 类型 int, float, bool, complex type() 查看变量类型 isinstance(a, int) 查看变量类型 showImg(https://segmentfault.com/img/remote/1460000016789047); 运算符 ...

    Riddler 评论0 收藏0
  • Python零基础到入门】Python基础语法篇——基本数据类型【文末送书】

    摘要:布尔值布尔值和布尔代数的表示完全一致,一个布尔值只有两种值的数据类型可以通过内置的函数查询,例如还可以用来判断和的区别在于不会认为子类是一种父类类型。会认为子类是一种父类类型。基本功能是进行成员关系测试和删除重复元素。 ...

    Winer 评论0 收藏0
  • 一文带你斩杀PythonNumpy☀️Pandas全部操作【全网最详细】❗❗❗

    目录Numpy简介Numpy操作集合1、不同维度数据的表示1.1 一维数据的表示1.2 二维数据的表示1.3 三维数据的表示2、 为什么要使用Numpy2.1、Numpy的ndarray具有广播功能2.2 Numpy数组的性能比Python原生数据类型高3 ndarray的属性和基本操作3.1 ndarray的基本属性3.2 ndarray元素类型3.3 创建ndarray的方式3.4 ndarr...

    asoren 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<