首先,我将介绍python 中get()函数的意义及用法
get()主要是字典(dict)的方法,用于安全地获取键对应的值,避免因键不存在而抛出KeyError异常。
一、基本语法
python
dict.get(key, default=None)
| 参数 | 说明 |
|---|---|
key | 要查找的键 |
default | 可选,键不存在时返回的默认值,默认为None |
返回值:
键存在 → 返回对应的值
键不存在 → 返回
default(不传则为None)
二、与dict[key]的区别
python
d = {"name": "Tom", "age": 18} # 方式1:直接用 [] print(d["name"]) # Tom # print(d["gender"]) # ❌ KeyError: 'gender' # 方式2:用 get() print(d.get("name")) # Tom print(d.get("gender")) # None(不报错) print(d.get("gender", "未知")) # 未知核心意义:get()不会因键缺失而报错。
三、常见用法
1. 提供默认值
python
config = {"host": "localhost"} port = config.get("port", 8080)2. 替代if key in dict判断
python
# 啰嗦写法 if "name" in d: value = d["name"] else: value = "默认" # 简洁写法 value = d.get("name", "默认")3. 计数场景
python
words = ["a", "b", "a", "c", "a"] count = {} for w in words: count[w] = count.get(w, 0) + 1 # {'a': 3, 'b': 1, 'c': 1}4. 分组场景
python
data = [("fruit", "apple"), ("veg", "carrot"), ("fruit", "banana")] groups = {} for k, v in data: groups.setdefault(k, []).append(v) # 或配合 get # {'fruit': ['apple', 'banana'], 'veg': ['carrot']}5. 链式安全访问(嵌套字典)
python
user = {"info": {"name": "Tom"}} name = user.get("info", {}).get("name", "未知") # Tom四、注意事项
get()不会修改字典,键不存在时也不会自动添加键。python
d = {} d.get("x", 10) # 返回 10 print(d) # {} —— 字典仍是空的如需"不存在则添加",用
setdefault():python
d.setdefault("x", 10) # d 变为 {'x': 10}默认值只在键缺失时返回。若键存在但值为
None,返回的是None,不是默认值:python
d = {"x": None} print(d.get("x", 100)) # None(不是 100)get()是字典的方法,列表、集合等没有此方法(列表有.index(),但语义不同)。
五、实用案例
data.txt,其中记录了2019年QS全球大学排名前20名的学校信息,示例如下:
1,麻省理工学院,美国
2,斯坦福大学,美国
3,哈佛大学,美国
第一列为排名,第2列为学校名称,第3列为学校所属的国家,字段之间用逗号”,隔开
程序读取data.txt文件内容,统计出现的国家个数以及每个国家上榜大学的数量及名称,输出结果格式示例如下:
美国:11:麻省理工学院斯坦福大学 哈佛大学加州理工学院芝加哥大学 普林斯顿大学康奈尔大学 耶鲁大学哥伦比亚大学 宾夕法尼亚大学密歇根大学安娜堡分校
英国:5:牛津大学 剑桥大学帝国理工学院伦敦大学学院 爱丁堡大学
如何使用get函数实现,相同键不同值的统计呢
f = open('data.txt', 'r',encoding="utf-8") dic={} for line in f: i=line.strip().split(",") if len(i)<3: continue dic[i[-1]]=dic.get(i[-1],[])+[i[1]] unis=list(dic.items()) unis.sort(key=lambda x:len(x[1]),reverse=True) for d in unis: print('{:>4}: {:>4} : {}'.format(d[0],len(d[1]),','.join(d[1])))六、其他对象的get
requests库:response.get(url)发送 GET 请求(不同于字典)。Queue:queue.get()从队列取元素。Tkinter 变量:
var.get()获取控件值。
这些是不同类的同名方法,语义各异,但"字典.get()" 是最常见、最需要掌握的用法。
总结
| 场景 | 推荐 |
|---|---|
| 确定键存在 | d[key] |
| 键可能不存在 | d.get(key, default) |
| 不存在则添加 | d.setdefault(key, default) |
get()的本质是容错取值,是写健壮 Python 代码的高频工具。
github.0voice