当前位置: 首页 > wzjs >正文

设计师常用网站门户自己做网站成本

设计师常用网站门户,自己做网站成本,阿里网站建设需要准备什么软件,手机网站建设的影响collections.defaultdict 是 Python collections 模块中提供的一个字典(dict)的子类。它与普通的字典非常相似,但有一个关键的区别:当你尝试访问一个不存在的键时,defaultdict 不会引发 KeyError 异常,而是…

collections.defaultdict 是 Python collections 模块中提供的一个字典(dict)的子类。它与普通的字典非常相似,但有一个关键的区别:当你尝试访问一个不存在的键时,defaultdict 不会引发 KeyError 异常,而是会自动为该键生成一个默认值。

defaultdict 的基本用法

defaultdict 的构造函数需要一个“默认工厂函数”(default_factory)作为参数。这个工厂函数是一个不接受任何参数的可调用对象,它会在访问不存在的键时被调用,并将其返回值作为该键的默认值。

Python

from collections import defaultdict# 使用 int 作为默认工厂函数,意味着当访问不存在的键时,会创建一个默认值为 0 的新条目。
# int() 会返回 0
word_counts = defaultdict(int)# 访问一个不存在的键 'apple',它会自动创建并赋值为 int() 的结果 (0)
print(word_counts['apple'])  # 输出: 0# 现在 'apple' 键存在了,我们可以像普通字典一样操作它
word_counts['apple'] += 1
print(word_counts['apple'])  # 输出: 1word_counts['banana'] += 1
word_counts['apple'] += 1
print(word_counts)  # 输出: defaultdict(<class 'int'>, {'apple': 2, 'banana': 1})

为什么使用 defaultdict

defaultdict 主要用于简化代码,避免在使用普通字典时频繁地检查键是否存在。这在以下场景中特别有用:

  1. 计数 (Counting): 统计列表中元素的出现次数,或字符串中字符的出现次数。

    使用普通字典:

    Python
    counts = {}
    my_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
    for item in my_list:if item in counts:counts[item] += 1else:counts[item] = 1
    print(counts)
    

    使用 defaultdict(int)

    Python
    from collections import defaultdict
    counts = defaultdict(int)
    my_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
    for item in my_list:counts[item] += 1  # 如果 'item' 不存在,会自动创建为 0,然后加 1
    print(counts)
    

    显然,defaultdict 的代码更简洁。

  2. 分组 (Grouping): 将具有相同特征的元素分组。例如,根据首字母将单词分组。

    使用普通字典:

    Python
    words_by_initial = {}
    words = ['apple', 'banana', 'apricot', 'cat', 'dog']
    for word in words:initial = word[0]if initial in words_by_initial:words_by_initial[initial].append(word)else:words_by_initial[initial] = [word]
    print(words_by_initial)
    

    使用 defaultdict(list)

    Python

    from collections import defaultdict
    words_by_initial = defaultdict(list)
    words = ['apple', 'banana', 'apricot', 'cat', 'dog']
    for word in words:initial = word[0]words_by_initial[initial].append(word) # 如果 'initial' 不存在,会自动创建为空列表 []
    print(words_by_initial)
    

    这里,list 作为默认工厂函数,当访问不存在的键时,会创建一个空列表。

  3. 累加/聚合 (Accumulating/Aggregating): 对某个键下的值进行累加或进行其他聚合操作。

    假设你有一些销售数据,想要计算每个产品的总销售额:

    Python
    from collections import defaultdictsales_data = [{'product': 'A', 'amount': 100},{'product': 'B', 'amount': 50},{'product': 'A', 'amount': 75},{'product': 'C', 'amount': 200},{'product': 'B', 'amount': 120},
    ]total_sales = defaultdict(float) # 或者 int,根据你的数据类型for item in sales_data:product = item['product']amount = item['amount']total_sales[product] += amountprint(total_sales)
    # 输出: defaultdict(<class 'float'>, {'A': 175.0, 'B': 170.0, 'C': 200.0})
    

defaultdict 的工厂函数

defaultdictdefault_factory 可以是任何可调用对象,而不仅仅是内置类型(如 intlistset)。

  • int: 默认值为 0

    Python
    d = defaultdict(int)
    print(d['a']) # 0
    
  • list: 默认值为 []

    Python
    d = defaultdict(list)
    d['a'].append(1)
    print(d) # defaultdict(<class 'list'>, {'a': [1]})
    
  • set: 默认值为 set()

    Python
    d = defaultdict(set)
    d['a'].add(1)
    d['a'].add(2)
    print(d) # defaultdict(<class 'set'>, {'a': {1, 2}})
    
  • str: 默认值为 ''

    Python
    d = defaultdict(str)
    print(d['a']) # ''
    
  • 自定义函数:

    Python
    def create_default_value():return "Not Found"d = defaultdict(create_default_value)
    print(d['unknown_key']) # Not Found
    
  • lambda 表达式:

    Python
    d = defaultdict(lambda: {'count': 0, 'items': []})
    d['product1']['count'] += 1
    d['product1']['items'].append('item_x')
    print(d['product1']) # {'count': 1, 'items': ['item_x']}
    

defaultdictdict.setdefault() 的比较

在某些情况下,dict.setdefault() 也可以实现类似的功能,但 defaultdict 通常更简洁高效。

dict.setdefault(key, default_value) 方法会在字典中查找 key。如果 key 存在,则返回其对应的值;如果 key 不存在,则将 key 插入字典并赋值为 default_value,然后返回 default_value

使用 dict.setdefault() 进行计数:

Python

counts = {}
my_list = ['apple', 'banana', 'apple']
for item in my_list:counts[item] = counts.setdefault(item, 0) + 1
print(counts) # {'apple': 2, 'banana': 1}

使用 dict.setdefault() 进行分组:

Python

words_by_initial = {}
words = ['apple', 'banana', 'apricot']
for word in words:initial = word[0]words_by_initial.setdefault(initial, []).append(word)
print(words_by_initial) # {'a': ['apple', 'apricot'], 'b': ['banana']}

对比:

  • 简洁性: defaultdict 在很多情况下代码更简洁,因为它省去了显式的条件判断或 setdefault 调用。
  • 性能: 对于大量操作,defaultdict 通常比重复调用 setdefault 稍微快一些,因为它避免了每次访问时都可能进行的键查找和方法调用开销。
  • 语义: defaultdict 明确表达了“如果键不存在,就创建一个默认值”的意图,使得代码更易读。
  • 灵活性: defaultdict 允许你指定一个工厂函数,而 setdefault 每次都需要提供一个具体的默认值。虽然 setdefault 也可以结合函数调用,但不如 defaultdict 的设计直接。


文章转载自:

http://K0wtE9kw.xsncf.cn
http://T88kFEWW.xsncf.cn
http://6WAZptAs.xsncf.cn
http://aBIjamMF.xsncf.cn
http://LLMPMjbj.xsncf.cn
http://kMTbKGFT.xsncf.cn
http://XlsmXpT0.xsncf.cn
http://138Fh1bF.xsncf.cn
http://zsBOu5t4.xsncf.cn
http://p4XydUdf.xsncf.cn
http://sHVKwAQ6.xsncf.cn
http://dsltyCBe.xsncf.cn
http://Qf2VjOkp.xsncf.cn
http://BUB2acip.xsncf.cn
http://uWxe7QmO.xsncf.cn
http://9vFFNbax.xsncf.cn
http://4soulBVu.xsncf.cn
http://dGQKDbsS.xsncf.cn
http://Mmcq7mN7.xsncf.cn
http://6vOMDjZc.xsncf.cn
http://05Rusjf1.xsncf.cn
http://ixxPpsum.xsncf.cn
http://mjkwprBX.xsncf.cn
http://wyDrxdII.xsncf.cn
http://z5GerxT1.xsncf.cn
http://m8zAiwBI.xsncf.cn
http://UE53k3A8.xsncf.cn
http://0CG3EBsC.xsncf.cn
http://6n6TE44s.xsncf.cn
http://saKGNkRT.xsncf.cn
http://www.dtcms.com/wzjs/631680.html

相关文章:

  • 福州网站建设哪家强网站推销怎么做ppt模板
  • 郑州网站制作汉狮信用体系建设网站维运工作制度
  • 湖南省水利水电建设工程学校网站wordpress gif 点击播放
  • 自适应网站模板公司阿里巴巴网站推广方式
  • 网站的实现怎么写c#网站开发视频教程 高清
  • 汉滨网站建设四平网站建设哪家效果好
  • 直播网站制作中国室内设计联盟邀请码
  • 中国建设银行网站查行号wordpress主题怎么汉化
  • 网站做好了如何发布海南建设工程股份有限公司网站
  • 广州市品牌网站建设平台wordpress英文主题变中文版
  • 班级建设网站设计方案妙趣网 通辽网站建设
  • 菏泽网的网站建设的联系方式青岛做网站推广公司哪家好
  • 网站设置路由器软件开发工程师是程序员吗
  • wordpress可视化建站梅州企业网站
  • 赣州91人才网官网百度小程序seo
  • 网上做外贸都有哪些网站浏览器下载安装2023最新版
  • 网站建站分辨率西安企业门户网站建设
  • 门户网站是什么网站空间到期了怎么办
  • 河北大良网站建设专业做seo推广
  • 口碑好的企业网站开发网站建站程序
  • 网站如何建立快捷方式开源企业网站管理系统
  • 网页设计创建网站的基本流程德州口碑好的网站制作公司
  • 单页网站设计制作营销型企业网站建设规划探讨
  • 影视公司网站模板wordpress 分页出404
  • 衡水网站建设选哪家网站建设的初期目标
  • 网站建设信息稿网站在线咨询代码
  • 旅游网站建设网站学生静态网页模板
  • 北京好的网站设计公司深圳市房地产信息网查询系统
  • 网站排名优化教程wordpress这么设置导航
  • 网站开发和数据库的关系wordpress 插件汉化