首先,我将介绍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 代码的高频工具。