python基础-if语句、字典
if
基本格式
car = 'bmw'
if(car == 'audi'):
print('yes')
else:
print('no')
如果多个条件
num = 10
if(num > 1 and num <= 100):
print('yes')
py中没有&&,&&相当于and,||相当于or
使用in判断某一值是否在列表中
list = list(range(1, 101))
if(100 in list):
print('yes')
else:
print('no')
// yes
not in判断 特定值是不是没有包含在列表中
list = list(range(1, 101))
if 102 not in list:
print('yes')
else:
print('no')
if-elif-else
age = 12
if age < 4:
print('<4')
elif age < 18 and age > 4:
print('<18 > 4')
else:
print('>18')
判断列表是否为空:(PY没有 !emptyList 会报错)
emptyList = []
if emptyList:
print('not empty')
else:
print('empty')
当 布尔型的变量 判断的时候,只有使用not 不能用 !,如下:
注意:False
正是 Python 布尔型的标准写法,pY中布尔型(Boolean)的两个值必须严格大写,即True
(表示 “真”)和False
(表示 “假”)—— 首字母大写,其余字母小写,这是 Python 的语法规则,不能修改。False:是 Python 内置的布尔值,代表 “假”,符合语法规则;false/FALSE:会被 Python 当作 “未定义的变量名”,如果直接使用会报错 NameError: name 'false' is not defined。
isboolvar = False
if not isboolvar:
print('not not ')
三元表达式
比如我在使用playwright进行爬取DOM结构的时候:
el_play_icon= el_cover.query_selector('play-icon')is_video= el_play_icon ?True:False错误
上面写法是不对的
py的三元表达式:结果1 if 条件 else 结果2
el_play_icon= el_cover.query_selector('.play-icon')(类选择器)
is_video=True if el_play_icon else False
字典
定义字典(对象)
alien = {
'color': 'green',
'point': 5
}
print(alien['color'])
print(alien['point'])
initial_state = {
'note': {
'note_id': 1
}
}
initial_state.get("note", {}).get("note_id")
字典还可以使用get(‘键名’,默认值)方法是一种安全获取嵌套字典中值的方法,和直接使用initial_state['note']['note_id'] 相比,它的优势在于避免因键不存在而抛出异常。
具体说明:
dict.get(key, default)
方法这是 Python 字典的内置方法,作用是:- 尝试获取字典中
key
对应的值。 - 如果
key
不存在,则返回default
参数指定的默认值(默认是None
)。
- 尝试获取字典中
嵌套使用的原因
initial_state.get("note", {}).get("note_id")
相当于分两步安全获取:- 第一步:
initial_state.get("note", {})
尝试获取initial_state
中的note
键。如果note
不存在(比如接口返回数据结构变化),则返回空字典{}
,避免后续操作报错。 - 第二步:
.get("note_id")
从第一步的结果(可能是note
对应的字典,也可能是空字典)中获取note_id
。如果note_id
不存在,返回None
,同样不会报错。 - 直接使用
initial_state['note']['note_id']
时,若note
键不存在,会直接抛出KeyError
异常,导致程序中断。 - 而
get
方法的嵌套使用是一种 “防御性编程”,即使中间某个键不存在,也能优雅地返回默认值(如None
),保证程序继续运行。
# 情况1:使用 get 方法(安全)
initial_state = {} # 假设没有 'note' 键
note_id = initial_state.get("note", {}).get("note_id") # 返回 None,无异常
# 情况2:直接取值(不安全)
initial_state = {}
note_id = initial_state['note']['note_id'] # 抛出 KeyError: 'note'
在解析接口返回的复杂字典(尤其是结构可能变化的数据)时,推荐使用get
方法嵌套取值,提高代码的健壮性。
给字典新增键值对
alien['x'] = 23
alien['y'] = 'ok'
print(alien)
// {'color': 'green', 'point': 5, 'x': 23, 'y': 'ok'}
删除某个键值对
del alien['point'];
print(alien)
遍历字典
for (key, value) in alien.items():
print( key + ':' + str(value) )
注意!如果值是数字,需要转化为字符串才能使用+拼接
for key, value in alien.items():
也可以不要括号
返回的键值对顺序与存储顺序可能不同!获取字典元素的顺序是不可预测的!
仅遍历字典中的键 key
for key in alien.keys():
print( key )
keys方法返回字典中所有键组成的列表
keysList = alien.keys()
print(keysList)
// dict_keys(['color', 'point', 'x', 'y'])
按顺序遍历字典中所有键
for name in sorted(alien.keys()):
print(name)
这里使用函数sorted() 获得按特定顺序排列的键列表的副本,输出前对列表先进行排序
获取值列表,不包含键的信息
for val in alien.values():
print(val)
当获得的values有太多重复项,需要对值列表进行去重,可以使用set()集合,集合类似于列表,但是每个元素都必须是独一无二的
for val in set(alien.values()):
print(val)
使用set对获得的值列表去重
将字典嵌套进列表中
ages = range(1, 5)
objs = []
for age in ages:
obj = {
'age' : age,
'name' : 'wubin-work' + str(age)
}
objs.append(obj)
print( objs )
输出结果
[{'age': 1, 'name': 'wubin-work1'}, {'age': 2, 'name': 'wubin-work2'},..., {'age': 4, 'name': 'wubin-work4'}]
字典中也能存储列表
obj = {
'age': 14,
'family': ['dad', 'mom', 'son']
}
字典中也能存储字典,就像JS的对象嵌套一样。在此就不演示了。