Python中如何使用get函数实现频次查询

首先,我将介绍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

四、注意事项

  1. get() 不会修改字典,键不存在时也不会自动添加键。

    python

    复制代码
    d = {}
    d.get("x", 10)   # 返回 10
    print(d)         # {}  —— 字典仍是空的

    如需"不存在则添加",用 setdefault():

    python

    复制代码
    d.setdefault("x", 10)   # d 变为 {'x': 10}
  2. 默认值只在键缺失时返回 。若键存在但值为 None,返回的是 None,不是默认值:

    python

    复制代码
    d = {"x": None}
    print(d.get("x", 100))   # None(不是 100)
  3. 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 代码的高频工具。

https://github.com/0voice

相关推荐
非优秀程序员4 分钟前
第03章 三大门户,烽烟起于瀛海威|《互联网产品恩仇录》
前端
知已难寻1 小时前
Docker 入门:容器技术与 Docker 基础
java·运维·服务器·docker·云原生·容器
曦樂~4 小时前
【Web Development】02 CSS
前端·css
风骏时光牛马4 小时前
后端服务接口开发与数据逻辑处理
前端
东鹏特饮4 小时前
经典打砖块(Breakout)游戏
前端·css·css3
IT_陈寒5 小时前
Vite的HMR把我整不会了:一个生产环境的热更新坑
前端·人工智能·后端
Mh5 小时前
如何使用双缓冲优化视频切换
前端
用户956256254295 小时前
跟做:Firecrawl 单页转 Markdown 再丢进沙箱总结
python·api
risenav5 小时前
低头蓄力,抬头起跳:《萤虫跳跳》的 Rokid AIUI 开发实战
前端
威哥爱编程5 小时前
模拟面试智能体开发实战 02:回答等半分钟,谁还愿意练?把服务端和流式输出搭起来
python·agent·harmonyos