Python基础之字典

  • 字典基础
  • 字典定义
  • 字典方法
  • 通过 for 循环打印字典
  • 相关内置函数用法

0x01 字典基础

  • 字典是什么?
    1、字典通过key: value形式表示
    2、字典使用大括号()定义,唯一的(哈希表)映射类型
    3、字典是可变类型。字典的必须不可变对象
    4、键(key)可以是元组字符串不可变对象
    5、键(key)必须保持唯一性
    6、字典可以存储任意对象,也可以是不同数据类型

0x02 定义字典方法

  • 字典定义
# 定义空字典
d = dict()  

# 定义空字典  
d = {}

# 通过dict()函数定义字典,并进行实例化  
d = dict(a = 1, b = 2)

# 常规定义
d = {"name": "Chow",
        "age": 20
}

# 复杂定义
d = dict([("name", "Chow"), ("age", 18)])
  • 多重赋值
# 方法一  
>>> x, y = 1, 2
>>> x
1
>>> y
2

# 方法二  
>>> x, y = ('Chow', 20)
>>> x
'Chow'
>>> y
20

0x03 字典方法

  • 获取字典方法
>>> dir(dict)
['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__'
, '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__',
 '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '_
_new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__'
, '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get
', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
  • 数据加入字典
>>> dic = {"name": "Robin.Chow", "sex": "男","age":26}
>>> dic['job'] = "运维工程师"
>>> dic
{'age': 26, 'sex': '男', 'name': 'Robin.Chow', 'job': '运维工程师'}
  • 修改字典的value
dic = {"name": "Robin.Chow", "sex": "男","age":26}
>>> dic
{'age': 26, 'sex': '男', 'name': 'Robin.Chow', 'job': '运维工程师'}
>>> dic['age'] = 28
>>> dic
{'age': 28, 'sex': '男', 'name': 'Robin.Chow', 'job': '运维工程师'}
  • keys() 获取字典的key
>>> dic = {"name": "Robin.Chow", "sex": "男","age":26}
>>> dic1 = dic.keys()                           # 获取字典内所有的key,以列表方式输出  
>>> dic1
dict_keys(['name', 'sex', 'age'])
  • values() 获取字典内的value
>>> dic = {"name": "Robin.Chow", "sex": "男","age":26}
>>> dic1 = dic.values()                       # 获取字典内所有value,以列表方式输出 
>>> dic1
dict_values(['Robin.Chow', '男', 26])
  • items() 字典转换为列表
>>> dic = {"name": "Robin.Chow", "sex": "男","age":26}
>>> dic1 = dic.items()                     # 获取字典内所有元素,以列表方式输出   
>>> dic1
dict_items([('name', 'Robin.Chow'), ('sex', '男'), ('age', 26)])
  • get() 返回key对应的value
>>> dic = {"name": "Robin.Chow", "sex": "男","age":26}
>>> "name" in dic                           # 判断字典内是否包换"name"key
True
>>> dic.get("age")                          # 获取键值age的value
26
>>> dic["age"]
26
  • setdefault(k, v) 若key不存在, 设置一个默认v并返回v值


  • update() 把一个字典更新到另一个字典内
>>> dic1 = {"name": "Robin.Chow", "sex": "男","age":26}
>>> dic2 = dict(addres = 'cq', job = 'IT')
>>> dic1.update(dic2)                              # 字符串连接  
>>> dic1
{'name': 'Robin.Chow', 'sex': '男', 'age': 26, 'addres': 'cq', 'job': 'IT'}
  • pop() 删除key对应的values元素
>>> dic1 = {'name': 'Robin.Chow', 'sex': '男', 'age': 26, 'addres': 'cq', 'job': 'IT'}
>>> dic1.pop('sex')                                   # 删除指定key所对应的value, 返回删除value
'男'
>>> dic1
{'name': 'Robin.Chow', 'age': 26, 'addres': 'cq', 'job': 'IT'}
  • has_key() 判断key是否存在, 存在返回True, 不存在返回False
>>> dic
{'age': 28, 'sex': '男', 'name': 'Robin.Chow', 'job': '运维工程师'}
>>> dic.pop('sex')                       # 删除性别
'男'
>>> dic
{'age': 28, 'name': 'Robin.Chow', 'job': '运维工程师'}
  • copy() 拷贝字典到新字典内
>>> dic1 = {'name': 'Robin.Chow', 'sex': '男', 'age': 26}
>>> dic2 = dic1                          # 浅拷贝: 引用对象
>>> dic3 = dic1.copy()               # 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用  
>>> dic2
{'name': 'Robin.Chow', 'sex': '男', 'age': 26}
>>> dic3
{'name': 'Robin.Chow', 'sex': '男', 'age': 26}
  • clear() 清空字典
>>> dic1 = {'name': 'Robin.Chow', 'sex': '男', 'age': 26}
>>> dic1.clear()                        # 清空字典  
>>> dic1
{}
  • fromkeys(seq, value) 把序列l,作为字典的key, 若不给values。默认为None, 若指定value, key对应的值为value
>>> seq = ('name', 'age')
>>> dic1 = dic.fromkeys(seq)
>>> dic1
{'name': None, 'age': None}
>>> dic2 = dic1.fromkeys(seq, 'Chow')
>>> dic2
{'name': 'Chow', 'age': 'Chow'}

0x04 通过for循环打印字典

  • for循环用法
#方法1
for key in info:
    print(key,info[key])

#方法2
for k,v in info.items():      #会先把dict转成list,数据里大时莫用
    print(k,v)
  • 练习示例
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018-4-1 9:05
# @Author  : anChow
# @File    : demo.py

info = dict()
name = input('Please input name: ')
age = input('Please input age: ')
sex = input('Please input sex: ')
info['name'] = name
info['age'] = age
info['sex'] = sex
print(info.items())
for k, v in info.items():
    print(" 'key':%s    --->    'value': %s " % (k, v))

0x05 高级函数

  • zip()
    1、用于将可迭代对象作为参数,将对象中对应的元素打包成元组,返回列表
    2、迭代器元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,将元组解压为列表
>>> l1 = ['a', 'b', 'c']
>>> l2 = [1, 2, 3, 4]
>>> l3 = zip(l1, l2)
>>> l3
<zip object at 0x0000023E940DCFC8>
>>> l3 = dict(zip(l1, l2))                         # 把列表转换成字典  
>>> l3
{'a': 1, 'b': 2, 'c': 3}

0x06 相关内置函数用法

  • help() 查看函数或模块用途
>>> help(dict)
Help on class dict in module builtins:

class dict(object)
 |  dict() -> new empty dictionary
 |  dict(mapping) -> new dictionary initialized from a mapping object's
 |      (key, value) pairs
 |  dict(iterable) -> new dictionary initialized as if via:
 |      d = {}
 |      for k, v in iterable:
 |          d[k] = v

.....  以下省略 .....
  • dir()
# 不带参数,返回当前范围内的变量、方法和定义的类型列表  
>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']

# 带参数,返回参数的属性、方法列表  
>>> dir(dict)
['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
  • str() 将对象转换为字符串
>>> i = 23
>>> str(i)
'23'
  • int() 将对象转换为整型
>>> str = '100'
>>> i = int(str)
>>> type(i)
<class 'int'>
>>> i
100
  • list() 用于将元组转换为列表
>>> dic1 = {'name': 'Robin.Chow', 'sex': '男', 'age': 26}
>>> list = list(dic1)            # 将字典的key转换成列表  
>>> list
['name', 'sex', 'age']
  • dict() 创建字典
>>> dict()                        # 空字典
{}
>>> dict(name = "Chow", age = 15)              # 传入关键字
{'name': 'Chow', 'age': 15}
>>> dict(zip(['one', 'two', 'three'], [1, 2, 3]))    # 映射函数方式来构造字典
{'three': 3, 'two': 2, 'one': 1} 
>>> dict([('one', 1), ('two', 2), ('three', 3)])     # 可迭代对象方式来构造字典
{'three': 3, 'two': 2, 'one': 1}
  • tuple() 将对象转换为元组
# 将列表转换为元组  
>>> li = [1, 2, 3, 4]
>>> tuple(li)
(1, 2, 3, 4)

# 将字典转换为元组  
>>> dict = dict(name = 'Chow', age = 10)
>>> tuple(dict)
('name', 'age')
  • xrange() 生成一个生成器
    1、 语法
xrange(stop)
xrange(start, stop[, step])
# 生成一个序列,不分配内存空间, 程序调用时,才读入内存  
>>>xrange(8)
xrange(8)
>>> list(xrange(8))
[0, 1, 2, 3, 4, 5, 6, 7]

# 起始位置,结束位置  
>>> xrange(3, 5)
xrange(3, 5)
>>> list(xrange(3,5))
[3, 4]

# 起始位置,结束位置,步长  
>>> xrange(0,6,2)
xrange(0, 6, 2)              # 步长为 2
>>> list(xrange(0,6,2))
[0, 2, 4]
  • range()
# 生成一组序列, 存入内存空间  
>>> range(8)  
[0, 1, 2, 3, 4, 5, 6, 7]

# 终止位置-1  
>>> range(3,5) 
[3, 4]
  • input() 标准输入, 返回字符串,python3
>>> str = input("Please input num: ")
Please input num: 1111
>>> type(str)
<class 'str'>
  • raw_input() 标准输入, 返回字符串,python2
>>>a = raw_input("Please input num:")
input:123
>>> type(a)
<type 'str'> 
  • len() 返回对象长度或个数
>>> li = [1, 2, 3, 4]
>>> len(li)
4
>>> dic1 = {'name': 'Robin.Chow', 'sex': '男', 'age': 26}
>>> len(dic1)                              # 返回键值对个数
3
  • type() 查看对象类型
>>> li = [1, 2, 3, 4]
>>> type(li)
<class 'list'>
  • isinstance() 判断对象是否为已知类型,返回布尔值,与type()相似
>>>a = 2
>>> isinstance (a,int)
True
>>> isinstance (a,str)
False
>>> isinstance (a,(str,int,list))    # 是元组中的一个返回 True
True
  • print() 打印输出
    1、Python3.x 是函数
    2、Python2.x 不是函数,是关键字
>>> print("Hello World")  
Hello World  
  • enumerate()
    1、遍历数据对象(如列表、元组或字符串)组合为索引序列,同时列出数据和数据下标,与 for 结合使用
    2、语法
enumerate(sequence, [start=0]) 

# sequence       序列、迭代器或支持迭代对象  
# start               下标起始位置   
>>> lise = ['Robin', 'Chow', 'Jone']
>>> for i, element in enumerate(lise):
...     print(i, lise[i])
...
0 Robin
1 Chow
2 Jone
原文地址:https://www.cnblogs.com/RobinChow/p/8685122.html