Python --字典

目录

1, 什么是字典?

2, 字典操作

2-1, 创建字典

2-1-1, 字典操作符{}

2-1-2, 工厂方法dict()

2-1-2-1, 入参为键值对

2-1-2-2, 入参为关键字参数

2-1-2-3, 入参为字典

2-1-3, 通过fromkeys()

2-2, 查询字典元素

2-2-1, 单个查询

2-2-2, 遍历字典

2-2-3, 成员判断

2-3, 修改字典

2-3-1, 修改某个元素

2-4, 删除字典元素     

2-4-1, 删除字典元素(del)

2-4-2, 删除字典元素(pop)

2-5, 字典参数简化print语句

3, 字典比较算法    

4,相关函数和内建方法

4-1, 相关函数

4-2, 内建方法


1, 什么是字典?

字典是一种映射数据类型, key值必须可哈希的, 且key不能重复

无序排列的,所以不能通过索引和切片访问其元素

2, 字典操作

2-1, 创建字典

2-1-1, 字典操作符{}

通过字典操作符{}进行创建,即my_dict = {key1: value1, key2: value2, ...}

In [90]: my_dict = {'a':1, 'b': 2}

2-1-2, 工厂方法dict()

2-1-2-1, 入参为键值对

通过工厂方法dict(), 即my_dict = dict(((k1, v1), (k2, v2), ...))

# 其中键值对可以用()括起来, 也可用[]括起来
In [7]: my_dict = dict((('a', 1), ('b', 2)))
In [8]: my_dict
Out[8]: {'a': 1, 'b': 2}

In [16]: my_dict = dict((['a', 1], ['b', 2]))
In [17]: my_dict
Out[17]: {'a': 1, 'b': 2}

2-1-2-2, 入参为关键字参数

通过工厂方法dict(k1=v1, k2=v2, ...)的方式进行创建

# 键值对为参数形式
In [3]: my_dict = dict(a=1, b=2)
In [4]: my_dict
Out[4]: {'a': 1, 'b': 2}

# 不传参数,生成一个空字典
In [82]: my_dict = dict()
In [83]: my_dict
Out[83]: {}
2-1-2-3, 入参为字典
# 入参是个字典,则返回该字典的浅拷贝, 比dict.copy()方法慢
In [80]: my_dict1 = dict(my_dict)

In [81]: my_dict1
Out[81]: {'a': 1, 'b': 1}

2-1-3, 通过fromkeys()

通过内建函数fromkeys(),即my_dict = {}.fromkeys((key1, key2, ...), value=xxx),没有指定value,则生成的字典所有值为None

# 因为fromkeys, 只能接受两个参数,所以键的序列需要括起来
In [25]: my_dict = {}.fromkeys(('a', 'b', 'c'), 1)
In [26]: my_dict
Out[26]: {'a': 1, 'b': 1, 'c': 1}

# 如果没有指定值, 则所有的值默认为None
In [27]: my_dict = {}.fromkeys(('a', 'b', 'c'))

In [28]: my_dict
Out[28]: {'a': None, 'b': None, 'c': None}

2-2, 查询字典元素

2-2-1, 单个查询

通过my_dict[键], 可单个查询字典元素

In [3]: my_dict['b']
Out[3]: 2

2-2-2, 遍历字典

# for中的my_dict,可以遍历字典的键
In [35]: for k in my_dict:
    ...:     print(my_dict[k])

2-2-3, 成员判断

通过in, not in运算符,可判断某个键是否在字典中, 返回bool值

In [37]: 'a' in my_dict
Out[37]: True

In [38]: 'd' not in my_dict
Out[38]: True

2-3, 修改字典

2-3-1, 修改某个元素

通过my_dict[键]=值, 可修改字典的元素, 若指定的键不存在,则表示添加该元素

# 修改字典元素的值
In [42]: my_dict['a'] = 2

In [43]: my_dict
Out[43]: {'a': 2, 'b': 1, 'c': 1}


# 因为键'd'在my_dict中不存在,此时表示添加新的元素
In [44]: my_dict['d'] = 1

In [45]: my_dict
Out[45]: {'a': 2, 'b': 1, 'c': 1, 'd': 1}

2-4, 删除字典元素     

2-4-1, 删除字典元素(del)

通过del my_dict[键], 删除字典指定元素, 无返回值

# 删除my_dict键为'a'的元素, 无返回值
In [50]: del my_dict['a']

2-4-2, 删除字典元素(pop)

通过my_dict.pop[键], 删除字典指定元素, 返回对应的值

# 删除my_dict中键为'b'的元素,返回对应的值
In [52]: my_dict.pop('b')
Out[52]: 1

2-5, 字典参数简化print语句

通过%(键)s的方式,进行简化

# print中输出两个参数,使用这种方式,入参只写上字典就可以了
In [48]: print('a: %(a)s , c:%(c)s' % my_dict)
a: 2 , c:1

3, 字典比较算法    

1, 先比较字典长度, 长的位大

2, 长度不相等则逐个比较字典key, key的比较顺序为key()方法放回的键顺序key大的为大

3, 若1, 2均相等,则逐个比较字典value, value大的为大

4, 若1, 2, 3都相等,则字典相等

In [73]: d1 = {}
In [74]: d2 = {'host': 'earth', 'port': 80}

# 比较字典是否相等,返回bool值
In [75]: d1 == d2
Out[75]: False

4,相关函数和内建方法

4-1, 相关函数

通过len(my_dict), 返回字典的长度

# 表示字典d1的长度为3
In [91]: len(d1)
Out[91]: 3

通过hash(key), 计算入参是否可哈希, 可哈希返回一个整数, 不可hash则报错

# 入参'a', 可hash, 返回一个整数
In [93]: hash('a')
Out[93]: -2758487174922364598

# 不可hash,会抛错
In [94]: hash([])
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-94-4c7351eba020> in <module>
----> 1 hash([])

TypeError: unhashable type: 'list'

4-2, 内建方法

通过my_dict.get(key, 默认值),  获取键对应的值, 指定键不存在,则返回默认值

# 获取键为a的值
In [97]: my_dict.get('a', 'opps')
Out[97]: 1

# 因为这里的键'd', 不在字典中,所有返回默认值'opps'
In [98]: my_dict.get('d', 'opps')
Out[98]: 'opps'

# 若获取的键不存在,也没有给定默认值,则返回None
In [100]: my_dict.get('d')

通过my_dict.items(), 返回一个由(key, value)组成的dict_iterm对象

# 返回my_dict字典的dict_items对象
In [102]: my_dict.items()
Out[102]: dict_items([('a', 1), ('b', 1), ('c', 1)])

# 通过内建函数list, 可将其转换为列表
In [103]: list(my_dict.items())
Out[103]: [('a', 1), ('b', 1), ('c', 1)]

通过my_dict.keys(), 返回字典键组成的dict_keys对象

# 返回my_dict的dict_keys对象
In [104]: my_dict.keys()
Out[104]: dict_keys(['a', 'b', 'c'])

# 通过内建方法list:将dict_keys对象转换为列表
In [107]: list(my_dict.keys())
Out[107]: ['a', 'b', 'c']

通过my_dict.values(), 返回字典值组成的dict_keys对象

# 返回my_dict的dict_values对象
In [108]: my_dict.values()
Out[108]: dict_values([1, 1, 1])

# 通过内建方法list:将dict_values对象转换为列表
In [109]: list(my_dict.values())
Out[109]: [1, 1, 1]

通过my_dict.setdefault(key, value), 设置my_dict中键为key的值为value, 若key存在,则值不变,如果不存在,则在字典中新增该键值对; 均返回key对应的value值

# 'a'在my_dict中存在,返回对应的值
In [117]: my_dict.setdefault('a', 'hehe')
Out[117]: 1

# 'e'在my_dict中不存在,则在my_dict中新增该键值对{'e': 'aaaa'}
In [119]: my_dict.setdefault('e', 'aaaa')
Out[119]: 'aaaa'

In [120]: my_dict
Out[120]: {'a': 1, 'c': 1, 'd': 'fads', 'e': 'aaaa'}

通过my_dict.update(dict1), dict1的值添加到my_dict中,如果my_dict和dict1存在重复的键则dict1的值覆盖my_dict中原来的值

In [121]: my_dict
Out[121]: {'a': 1, 'c': 1, 'd': 'fads', 'e': 'aaaa'}

In [122]: my_dict1 = {'a':2, 'b': 3}

In [123]: my_dict.update(my_dict1)

In [124]: my_dict
Out[124]: {'a': 2, 'c': 1, 'd': 'fads', 'e': 'aaaa', 'b': 3}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值