Python字典技巧一锅炖

举报
技术火炬手 发表于 2019/08/01 15:16:48 2019/08/01
【摘要】 优雅的字典 北冥有鱼,其名为鲲,鲲之大,一锅炖不下。鲲炖不下,那今天我们来一锅炖了字典(dict)。在Python的使用中,字典是一个基础且使用率报表的数据类型。字典的创建与初始化 ...

1.png

北冥有鱼,其名为鲲,鲲之大,一锅炖不下。鲲炖不下,那今天我们来一锅炖了字典(dict)。

在Python的使用中,字典是一个基础且使用率报表的数据类型。

2.png

#创建一个字典
a={}
b=dict()
"""
我们常初在始化空字典时,使用到上面两种方式。
如果我们在字典创建的同时需要赋值呢?
"""

# 普通的方式
a={'a':1,'b':'to','c':'63'}
# 更优雅的赋值
b=dict(a=1,b='to',c='63')
"""不管从重复输入的引号上,还是从输入方便考虑,你都该选择后者
再深入一下,如果我们现在有四个人,
需要统计他们的工资,初始没人都是10000,该如何创建?
按照上面的dict(x=y)没错,但批量的初始化,你应该使用更优雅的方式:
"""

names=["zhang","wang","li","zhao"]
# 普通方式
users = dict(zhang=10000,wang=10000,li=10000,zhao=10000)
# 更优雅的方式
user1.dict().formatkeys(names,10000)

3.png

a={'a':1,'b':'to','c':'63'}
a['b']
>>> output:  to
"""
上面的这种value值获取方式较为常见,但如果a中没有b,
或者在字典的使用过程中b 这个key被del了呢?
这是会报一个KeyError的错误,所以养成好习惯,使用下面的方式
当key值不存在时,返回none,或者自定义一个默认值。
"""

a.get('b',[default_no可选...])

4.png

#  更新
a={'a':1,'b':'to','c':'63'}
a.update('a':2)
a.update(a=2) # 这种方式同样适用与更新操作
# 删除某个键值对
del a['a']
pop('a')
"""
两者都可以达到删除某个键值对的操作,
但后者相当于去除后删除,具备返回值
"""

del a 删除字典a
a.clear()清空字典a

判断has_key操作
python2中,判断字典是否存在某个值,可以使用has_key('key'),
但在python3中取消了该参数,如果我们想判断可以使用以下方式:
"""

a={'a':1,'b':'to','c':'63'}
'b' in a.keys()
a.__contains__('b')

使用enumerate,优雅的输出字典

a = {'a': 1, 'b': 'to', 'c': '63'}
for line, item in enumerate(a.items(), start=1):
   print("[{}] {} --> {}".format(line, *item))
>>> output:
"""
[1] a --> 1
[2] b --> to
[3] c --> 63
"""

5.png

我们知道默认的dict(字典)是无序的,但是在某些情形我们需要保持dict的有序性,这个时候可以使用OrderedDict,它是dict的一个subclass(子类),但是在dict的基础上保持了dict的有序型,下面我们来看一下使用方法。

example1:

>>> from collections import OrderedDict
# 无序的dict
>>> d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}

这是一个无序的dict(字典),现在我们可以使用OrderedDict来让这个dict变得有序。

# 将d按照key来排序
>>> OrderedDict(sorted(d.items(), key=lambda t: t[0]))
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
# 将d按照value来排序
>>> OrderedDict(sorted(d.items(), key=lambda t: t[1]))
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])
# 将d按照key的长度来排序
>>> OrderedDict(sorted(d.items(), key=lambda t: len(t[0])))
OrderedDict([('pear', 1), ('apple', 4), ('orange', 2), ('banana', 3)])

example2:

"""
使用popitem(last=True)让我们按照LIFO(先进后出)顺序删除dict中的key-value,
即删除最后插入的键值对,如果last=False就按照FIFO删除dict中key-value。
"""

>>> d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}
# 将d按照key来排序
>>> d = OrderedDict(sorted(d.items(), key=lambda t: t[0]))
>>> d
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
# 使用popitem()方法来移除最后一个key-value对
>>> d.popitem()
('pear', 1)
# 使用popitem(last=False)来移除第一个key-value对
>>> d.popitem(last=False)
('apple', 4)

example3:

"""
使用move_to_end(key,last=True)来改变有序OrderedDict的key-value顺序,
通过这个方法我们可以将排序好的OrderedDict对象中的任意一个key-value,
插入到字典的开头或者结尾。
"""
>>> d = OrderedDict.fromkeys('abcd')
>>> d
OrderedDict([('a', None), ('b', None), ('c', None), ('d', None)])
# 将key为b的key-value对移动到dict的最后
>>> d.move_to_end('b')
>>> d
OrderedDict([('a', None), ('c', None), ('d', None),  ('b', None)])
>>> ''.join(d.keys())
'acdeb'
# 将key为b的key-value对移动到dict的最前面
>>> d.move_to_end('b', last=False)
>>> ''.join(d.keys())
'bacde'

6.png

好了,今天的内容就到这里,如果觉得有帮助,记得点赞支持。欢迎大家关注我的公众号【清风Python】

作者:清风Python

链接:https://www.jianshu.com/p/2e3e85beadac

来源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。