算法Python:用字典进行计数

 

目录

访问日志

十个使用场景

        1. **网页访问次数统计**:

        2. **商店每日销售统计**:

        3. **错误日志统计**:

        4. **社交媒体提及统计**:

        5. **投票系统**:

        6. **交通流量统计**:

        7. **API 调用次数限制**:

        8. **游戏中的物品采集统计**:

        9. **图书馆借阅统计**:

        10. **在线课程观看次数**:


        cnts[level][urlComponent] = cnts[level].get(urlComponent, 0) + 1

        这段代码是Python中用于计数的常见代码。它是一个使用字典进行计数的示例,它的作用是统计特定级别和URL组件出现的次数。让我们对这段代码进行解释:


cnts[level][urlComponent] = cnts[level].get(urlComponent, 0) + 1


# - `cnts` 是一个字典,它的键是级别(level),
# 对应的值也是一个字典,它的键是URL组件(urlComponent),对应的值是出现的次数。

# - `cnts[level]` 获取了指定级别的字典。
# 如果该级别的字典不存在,则会创建一个新的字典。

# - `cnts[level].get(urlComponent, 0)` 从指定级别的字典中获取指定URL组件的值,
# 如果URL组件不存在,则默认为0。

# - `cnts[level][urlComponent] = cnts[level].get(urlComponent, 0) + 1` 
# 把指定级别的URL组件出现次数加1,然后更新到字典中。

访问日志

        举个例子,假设我们有一个网站访问日志,我们要统计每个页面级别(例如首页、产品页、关于页)的各个URL组件(例如不同的产品、不同的文章)出现的次数。我们可以使用上述代码来实现这一功能。例如:

# 初始化计数器
cnts = {}

# 模拟日志数据
log_data = [
    {"level": "homepage", "urlComponent": "banner"},
    {"level": "homepage", "urlComponent": "menu"},
    {"level": "product", "urlComponent": "item1"},
    {"level": "product", "urlComponent": "item2"},
    {"level": "product", "urlComponent": "item1"},
    {"level": "about", "urlComponent": "history"},
    {"level": "about", "urlComponent": "team"}
]

# 统计每个级别和URL组件的出现次数
for entry in log_data:
    level = entry["level"]
    urlComponent = entry["urlComponent"]
    cnts[level] = cnts.get(level, {})
    cnts[level][urlComponent] = cnts[level].get(urlComponent, 0) + 1

print(cnts)
# 打印结果{'homepage': {'banner': 1, 'menu': 1}, 'product': {'item1': 2, 'item2': 1}, 'about': {'history': 1, 'team': 1}}

在这个示例中,我们模拟了一个访问日志数据,并使用上述代码来统计每个级别和URL组件的出现次数。通过这种方式,我们可以方便地进行数据的统计和分析。

十个使用场景

        下面是十个使用场景的示例代码,每个场景都使用了 `cnts[level][urlComponent] = cnts[level].get(urlComponent, 0) + 1` 这行代码来累加计数:

        1. **网页访问次数统计**:
cnts = {}
def log_page_visit(date, page):
    cnts[date] = cnts.get(date, {})
    cnts[date][page] = cnts[date].get(page, 0) + 1

log_page_visit('2023-04-01', '/home')
log_page_visit('2023-04-01', '/about')
log_page_visit('2023-04-01', '/home')  # '/home' 页面在 '2023-04-01' 的访问次数加 1

        2. **商店每日销售统计**:
cnts = {}
def record_daily_sale(date, product):
    cnts[date] = cnts.get(date, {})
    cnts[date][product] = cnts[date].get(product, 0) + 1

record_daily_sale('2023-04-01', 'apple')
record_daily_sale('2023-04-01', 'banana')
record_daily_sale('2023-04-02', 'apple')  # 'apple' 在 '2023-04-02' 的销售次数加 1

        3. **错误日志统计**:
cnts = {}
def log_error(date, error_code):
    cnts[date] = cnts.get(date, {})
    cnts[date][error_code] = cnts[date].get(error_code, 0) + 1

log_error('2023-04-01', '404')
log_error('2023-04-01', '500')
log_error('2023-04-01', '404')  # '404' 错误在 '2023-04-01' 的统计次数加 1

        4. **社交媒体提及统计**:
cnts = {}
def count_mentions(date, hashtag):
    cnts[date] = cnts.get(date, {})
    cnts[date][hashtag] = cnts[date].get(hashtag, 0) + 1

count_mentions('2023-04-01', '#python')
count_mentions('2023-04-01', '#coding')
count_mentions('2023-04-02', '#python')  # '#python' 标签在 '2023-04-02' 的提及次数加 1

        5. **投票系统**:
cnts = {}
def record_vote(election, candidate):
    cnts[election] = cnts.get(election, {})
    cnts[election][candidate] = cnts[election].get(candidate, 0) + 1

record_vote('2023_election', 'Alice')
record_vote('2023_election', 'Bob')
record_vote('2023_election', 'Alice')  # 'Alice' 在 '2023_election' 的票数加 1

        6. **交通流量统计**:
cnts = {}
def count_cars(date, highway):
    cnts[date] = cnts.get(date, {})
    cnts[date][highway] = cnts[date].get(highway, 0) + 1

count_cars('2023-04-01', 'I-5')
count_cars('2023-04-01', 'I-10')
count_cars('2023-04-02', 'I-5')  # 'I-5' 高速在 '2023-04-02' 的车流量加 1

        7. **API 调用次数限制**:
cnts = {}
def track_api_usage(user, api_endpoint):
    cnts[user] = cnts.get(user, {})
    cnts[user][api_endpoint] = cnts[user].get(api_endpoint, 0) + 1

track_api_usage('user123', '/get_data')
track_api_usage('user123', '/post_data')
track_api_usage('user123', '/get_data')  # 'user123' 对 '/get_data' API 的调用次数加 1

        8. **游戏中的物品采集统计**:
cnts = {}
def collect_item(player, item):
    cnts[player] = cnts.get(player, {})
    cnts[player][item] = cnts[player].get(item, 0) + 1

collect_item('player1', 'gold_coin')
collect_item('player1', 'silver_coin')
collect_item('player1', 'gold_coin')  # 'player1' 收集的 'gold_coin' 数量加 1

        9. **图书馆借阅统计**:
cnts = {}
def log_book_borrow(date, book_id):
    cnts[date] = cnts.get(date, {})
    cnts[date][book_id] = cnts[date].get(book_id, 0) + 1

log_book_borrow('2023-04-01', 'B123')
log_book_borrow('2023-04-01', 'B456')
log_book_borrow('2023-04-01', 'B123')  # 'B123' 书籍在 '2023-04-01' 的借阅次数加 1

        10. **在线课程观看次数**:
cnts = {}
def count_course_view(course, user):
    cnts[course] = cnts.get(course, {})
    cnts[course][user] = cnts[course].get(user, 0) + 1

count_course_view('Python_Basics', 'user123')
count_course_view('Data_Science', 'user456')
count_course_view('Python_Basics', 'user123')  # 'user123' 对 'Python_Basics' 课程的观看次数加 1

以上场景都使用了这段代码来对某个特定的键进行值的累加计数,适用于多种不同的统计分析应用场景。

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
数据结构和算法是计算机科学中非常重要的两个概念,Python作为一门高级编程语言,也提供了许多内置的数据结构和算法库。 关于数据结构,Python内置了许多常用的数据结构,例如列表(list)、元组(tuple)、字典(dict)和集合(set)等。此外,Python还提供了一些高级数据结构,例如堆(heapq)、双端队列(collections.deque)和有序字典(collections.OrderedDict)等。这些数据结构可以帮助我们更方便地处理数据,提高程序的效率。 关于算法Python也提供了许多内置的算法库,例如排序算法(sorted)、查找算法(binary search)和随机数生成算法(random)等。此外,Python还提供了一些高级算法库,例如科学计算库NumPy和机器学习库scikit-learn等。这些算法库可以帮助我们更方便地实现各种算法,提高程序的效率和准确性。 下面是一个例子,演示如何使用Python内置的数据结构和算法库: ```python # 使用列表存储数据 data = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] # 使用sorted函数进行排序 sorted_data = sorted(data) print(sorted_data) # 输出:[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9] # 使用collections.Counter进行计数 from collections import Counter count_data = Counter(data) print(count_data) # 输出:Counter({5: 3, 3: 2, 1: 2, 2: 1, 4: 1, 9: 1, 6: 1}) # 使用heapq模块进行堆排序 import heapq heapq.heapify(data) sorted_data = [] while data: sorted_data.append(heapq.heappop(data)) print(sorted_data) # 输出:[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9] ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值