python字典(一)——defaultdict的学习

本文介绍了Python中defaultdict的用法,它在访问不存在的键时返回默认值,而非引发错误。defaultdict接受一个工厂函数参数,能创建不同类型的默认值,如list、set、str、int等。文中通过示例展示了如何使用list和str作为工厂函数,并总结了defaultdict优化字典操作及自定义value类型的功能。

一、前言

本页主要用来记录python字典的一些知识

二、Python中的defaultdict的详解

2.1defaultdict返回的默认值

defaultdict顾名思义默认字典,这个字典属于普通字典的一个子集,是对普通字典的改进

dcit的使用:

当访问字典里面不存在的key时会报错

defaultdict的使用:

当访问字典里面不存在的key时会返回默认值

事实上,defaultdict还可以返回其他默认值,defaultdict一般都会接受一个工厂函数作为参数,不同的参数返回不同的默认值

语法:dict =defaultdict( factory_function)

其中factory_function可以为set、list、str、int、dict等,当访问不存在的key

defaultdict( set)返回set()

defaultdict(list)返回[]

defaultdict( str)返回空字符串

defaultdict( int)返回0

defaultdict(dict)返回dict

举例:

    1

    2

    3

    4

    5

    6

    7

    8

    9

   10

   11

   12

   13

from collections import defaultdict

dict1 = defaultdict(set)

dict2 = defaultdict(list)

dict3 = defaultdict(str)

dict4 = defaultdict(int)

dict5 = defaultdict(dict)

print(dict1[1])

print(dict2[1])

print(dict3[1])

print(dict4[1])

print(dict5[1])

得到:

set()
[]

0
{}

2.2.defaultdict的使用

工厂函数为list

    1

    2

    3

    4

    5

    6

    7

    8

    9

   10

   11

   12

   13

   14

   15

   16

   17

   18

   19

from collections import defaultdict

def test2():

    test_list = [("A", "1"), ("B", "1"), ("A", "2"), ("B", "2"), ("A", "3"), ("B", "3")]

    test_default_dict = defaultdict(list)

    print(test_default_dict)

    for key, value in test_list:

        test_default_dict[key].append(value)

    print(test_default_dict)

    print(type(test_default_dict))

    for key, value in test_default_dict.items():

        print(key, value)

if __name__ == "__main__":

    test2()

输出:

defaultdict(<class 'list'>, {})

defaultdict(<class 'list'>, {'A': ['1', '2', '3'], 'B': ['1', '2', '3']})

<class 'collections.defaultdict'>

A ['1', '2', '3']

B ['1', '2', '3']

工厂函数为str

    1

    2

    3

    4

    5

    6

    7

    8

    9

   10

   11

   12

   13

   14

   15

   16

def test3():

    test_str = "hello_default_dict"

    test_default_dict = defaultdict(str)

    print(test_default_dict)

    for single_str in test_str:

        test_default_dict[single_str] = single_str

    print(test_default_dict)

    print(type(test_default_dict))

    for key, value in test_default_dict.items():

        print(type(test_default_dict[key]))

if __name__ == "__main__":

    test3()

输出:

defaultdict(<class 'str'>, {})

defaultdict(<class 'str'>, {'h': 'h', 'e': 'e', 'l': 'l', 'o': 'o', '_': '_', 'd': 'd', 'f': 'f', 'a': 'a', 'u': 'u', 't': 't', 'i': 'i', 'c': 'c'})

<class 'collections.defaultdict'>

<class 'str'>

<class 'str'>

<class 'str'>

<class 'str'>

<class 'str'>

<class 'str'>

<class 'str'>

<class 'str'>

<class 'str'>

<class 'str'>

<class 'str'>

<class 'str'>

综上我们可以发现经过指定的工厂函数,defaultdict里面的value类型会变为这个指定的数据类型

三、总结

1.defaultdict可以优化普通字典访问不存在的key带来的错误,返回默认值

2.指定工厂函数后,value可以转变为相应的数据类型

### 如何在Python中创建或声明字典Python 中,可以通过多种方式创建或声明字典。以下是几种常见的方法: #### 方法:使用花括号 `{}` 创建空字典 最简单的方式是通过对大括号 `{}` 来创建个空字典[^2]。 ```python empty_dict = {} print(empty_dict) # 输出: {} ``` #### 方法二:初始化带有键值对的字典 如果需要直接定义些初始的键值对,可以直接在大括号内部指定它们,键和值之间用冒号 `:` 分隔,每组键值对之间用逗号 `,` 隔开。 ```python my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'} print(my_dict) # 输出: {'name': 'Alice', 'age': 25, 'city': 'New York'} ``` #### 方法三:使用内置函数 `dict()` 构造字典 除了使用大括号外,还可以调用内置的 `dict()` 函数来创建字典。该函数支持多种形式传入参数。 ##### 使用关键字参数 ```python another_dict = dict(name='Bob', age=30, city='Los Angeles') print(another_dict) # 输出: {'name': 'Bob', 'age': 30, 'city': 'Los Angeles'} ``` ##### 使用元组列表作为输入 也可以传递个包含 `(key, value)` 对的列表给 `dict()` 函数。 ```python tuple_list = [('name', 'Charlie'), ('age', 35), ('city', 'Chicago')] third_dict = dict(tuple_list) print(third_dict) # 输出: {'name': 'Charlie', 'age': 35, 'city': 'Chicago'} ``` #### 方法四:利用 `collections.defaultdict` 对于某些特定场景下可能需要用到具有默认值功能的字典,则可以借助于模块 `collections` 提供的功能——`defaultdict`[^3]。下面展示了个例子,在此情况下当我们尝试访问未存在的键时会返回个空列表而不是抛出异常。 ```python from collections import defaultdict grades = defaultdict(list) grades['Class 1'].append('A') grades['Class 2'].append('B') print(dict(grades)) # 输出: {'Class 1': ['A'], 'Class 2': ['B']} ``` 以上就是在 Python 编程语言里实现字典对象的不同途径介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值