NO.1 用一个表达式合并两个字典内容
如何合并两个字典
在Python3.5+:
>>> x = {'a': 1, 'b': 2}
>>> y = {'b': 3, 'c': 4}
>>> z = {**x, **y}
>>> z
{'c': 4, 'a': 1, 'b': 3}
在Python2.x:
>>> x = {'a': 1, 'b': 2}
>>> y = {'b': 3, 'c': 4}
>>> z = dict(x, **y)
>>> z
{'a': 1, 'c': 4, 'b': 3}
在这些示例中,Python按照表达式中列出的顺序合并字典键,从左到右重写副本。
No.2 在Python中一次测试多个标志的不同方法
x, y, z = 0, 1, 0
if x == 1 or y == 1 or z == 1:
print('passed')
if 1 in (x, y, z):
print('passed')
# 这些都是对真实性的检验:
if x or y or z:
print('passed')
if any((x, y, z)):
print('passed')
NO.3 如何按vaule对Python字典进行排序
# 获取按value排序的表示形式
>>> xs = {'a': 4, 'b': 3, 'c': 2, 'd': 1}
>>> sorted(xs.items(), key=lambda x: x[1])
[('d', 1), ('c', 2), ('b', 3), ('a', 4)]
# 或者
>>> import operator
>>> sorted(xs.items(), key=operator.itemgetter(1))
[('d', 1), ('c', 2), ('b', 3), ('a', 4)]
NO.4 利用Python字典get()方法获取字典默认参数
name_for_userid = {
382: "Alice",
590: "Bob",
951: "Dilbert",
}
def greeting(userid):
return "Hi %s!" % name_for_userid.get(userid, "there")
>>> greeting(382)
"Hi Alice!"
>>> greeting(333333)
"Hi there!"
当"get()"被调用时,它会检查字典中是否存在给定的key,如果确实存在,则返回该key的值,如果不存在,则返回默认参数的值。
No.5 使用Python namedtuples模块能更简短的定义一个类相比手动定义
# 示例
>>> from collections import namedtuple
>>> Car = namedtuple('Car', 'color mileage')
# 定义的"car"类预期工作流程如下:
>>> my_car = Car('red', 3812.4)
>>> my_car.color
'red'
>>> my_car.mileage
3812.4
>>> my_car
Car(color='red' , mileage=3812.4)
# 跟tuple一样, namedtuples是不可变的:
>>> my_car.color = 'blue'
AttributeError: "can't set attribute"
No.6 使用json.dumps()跟漂亮的打印字典
pprint模块的替代品?
# 标准的字典输出格式很难读懂
>>> my_mapping = {'a': 23, 'b': 42, 'c': 0xc0ffee}
>>> my_mapping
{'b': 42, 'c': 12648430. 'a': 23}
# json模块可以做得更好
>>> import json
>>> print(json.dumps(my_mapping, indent=4, sort_keys=True))
{
"a": 23,
"b": 42,
"c": 12648430
}
# 注意,这只适用于包含dicts的情况
# 原始类型,还得利用 "pprint"模块
>>> json.dumps({all: 'yup'})
TypeError: keys must be a string
在大多数情况下,还是坚持使用内置的"pprint"模块吧:-)
No.7 在Python中解压缩函数参数
# 函数参数解包
def myfunc(x, y, z):
print(x, y, z)
tuple_vec = (1, 0, 1)
dict_vec = {'x': 1, 'y': 0, 'z': 1}
>>> myfunc(*tuple_vec)
1, 0, 1
>>> myfunc(**dict_vec)
1, 0, 1
No.8 使用timeit模块测量Python代码的执行时间
>>> import timeit
>>> timeit.timeit('"-".join(str(n) for n in range(100))', number=10000)
0.3273639119870495
>>> timeit.timeit('"-".join([str(n) for n in range(100)])', number=10000)
0.28391496499534696
>>> timeit.timeit('"-".join(map(str, range(100)))', number=10000)
0.25793385397992097
No.9 Python针对变量值快速交换
>>> a = 23
>>> b = 42
>>> tmp = a
>>> a = b
>>> b = tmp
>>> a, b
(42, 23)
>>> 更简短的操作
>>> a, b = 23, 43
>>> a, b
(23, 43)
>>> a, b = b, a
>>> a, b
(43, 23)
No.10 Python is vs ==
>>> a = [1, 2, 3]
>>> b = a
>>> a, b
([1, 2, 3], [1, 2, 3])
>>> a is b
True
>>> a == b
True
>>>
>>> c = list(a)
>>> a == c
True
>>> a is c
False
如果两个变量指向同一个对象,则"is"表达式的值为True
如果变量引用的对象是相等的,则"=="将计算为True
参考:https://fashengba.com/post/python-operates-difference-between-equals-and-is.html
No.11 在Python中函数是第一个类公民
>>> def myfunc(a, b):
... return a + b
...
>>> funcs = [myfunc]
>>> funcs[0]
<function myfunc at 0x10d25a730>
>>> funcs[0](2, 3)
5
它们可以作为参数传递给其他函数,作为其他函数的值返回,并分配给变量并存储在数据结构中。
No.12 Python Dict可以用来模拟switch/case语句
因为Python有first-class函数,它们可以用来模拟switch/case语句
def dispatch_if(operator, x, y):
if operator == 'add':
return x + y
elif operator == 'sub':
return x - y
elif operator == 'mul':
return x * y
elif operator == 'div':
return x / y
else:
return None
def dispatch_dict(operator, x, y):
return {
'add': lambda: x + y,
'sub': lambda: x - y,
'mul': lambda: x * y,
'div': lambda: x / y,
}.get(operator, lambda: None)()
# 使用示例
>>> dispatch_if('mul', 2, 8)
16
>>> dispatch_dict('mul', 2, 8)
16
>>> dispatch_if('unknown', 2, 8)
None
>>> dispatch_dict('unknown', 2, 8)
None
No.13 Python内置HTTP Server介绍
Python有一个内置于标准库中的HTTP Server, 这对于构建预览网站非常方便。
# Python 3.x
$ python3 -m http.server
# Python 2.x
$ python -m SimpleHTTPServer 8000
# (这件服务于当前目录 http://localhost:8000)
No.14 理解Python列表生成
vals = [expression
for value in collection
if condition]
# 等价于:
vals = []
for value in collection:
if condition:
vals.append(expression)
# Example:
>>> even_squares = [x * x for x in range(10) if not x % 2]
>>> even_squares
[0, 4, 16, 36, 64]
No.15 Python 3.5+ 类型注释
# Python 3.5+支持“类型注释”,可以与Mypy等工具一起使用,编写静态类型Python:
def my_add(a: int, b: int) -> int:
return a + b
No.16 Python列表切片语法
# Python的列表片语法可以在没有索引的情况下使用,以获得一些有趣和有用的东西:
# 可以从列表中清除所有元素:
>>> lst = [1, 2, 3, 4, 5]
>>> del lst[:]
>>> lst
[]
# 可以替换列表的所有元素,而无需创建新的列表对象:
>>> a = lst
>>> lst[:] = [7, 8, 9]
>>> lst
[7, 8, 9]
>>> a
[7, 8, 9]
>>> a is lst
True
# 也可以创建一个浅copy列表
>>> b = lst[:]
>>> b
[7, 8, 9]
>>> b is lst
False
No.16 Python查找可迭代对象出现最多的元素
# collections.Counter 可以帮助我们在一个可迭代对象中找出出现最多的元素
>>> import collections
>>> c = collections.Counter('helloworld')
>>> c
Counter({'l': 3, 'o': 2, 'e': 1, 'd': 1, 'h': 1, 'r': 1, 'w': 1})
>>> c.most_common(3)
[('l', 3), ('o', 2), ('e', 1)]
未完待续........
本文由 空心菜 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Oct 28, 2018 at 07:25 am