在处理网页,或者说处理字符串时,我们经常获得到一个字典,对于字典里的键值对的处理挺关键的。然而有些朋友过度使用 Python 的语法特性,为了炫技,写成很复杂的难以理解的单行表达式,就有点小题大做了。
from urllib.parse import parse_qs
# 解析字符串,返回字典
my_value = parse_qs('red=5&blue=0&green=', keep_blank_values=True)
print(my_value)
# {'red': ['5'], 'blue': ['0'], 'green': ['']}
# For query string 'red=5&blue=0&green='
red = my_value.get('red', [''])[0] or 0 # or 操作符
green = my_value.get('green', [''])[0] or 0 # 如果 or 前判断 False
opacity = my_value.get('opacity', [''])[0] or 0 # 赋值 or 后语句
print('Red: %r' %red) # %r 用 rper()方法处理对象
print('green: %r' %green) # 打印时能够重现它所代表的对象
print('opacity: %r' %opacity)
# Red: '5'
# green: 0
# opacity: 0
red_1 = my_value.get('red', [''])
red_1 = int(red_1[0]) if red_1[0] else 0
print(red_1)
# 5
green_1 = my_value.get('green', [''])
if green_1[0]: # 如果有值
green_1 = int(green_1[0])
else:
green_1 = 0
print(green_1)
# 0
def get_int_value(dic_kv, key, default=0):
value = dic_kv.get(key, [''])
if value[0]:
return int(value[0])
else:
return default
print(get_int_value(my_value, 'opacity'))
print(get_int_value(my_value, 'red'))
# 0
# 5