collections之defaultdict

2023-10-05 20:18
文章标签 collections defaultdict

本文主要是介绍collections之defaultdict,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在学习collections库,做一点笔记。

1、基础介绍

统计一个列表中元素出现的次数

#encoding:utf-8from collections import defaultdictusers = ["bobby1","bobby2","bobby3","bobby2","bobby4","bobby5","bobby4"]
user_dic = {}
#统计一下每个字段出现的次数
# 方法一
for user in users:user_dic[user] += 1

很明显因为在取user_dict['bobby1']的时候失败,因为该dict中并无bobby1的key值,因此做以下修改

for user in users:if user not in user_dic:user_dic[user] = 1else:user_dic[user] += 1print(user_dic)

使用setdefault函数

for  user in users:# user为键值user_dic.setdefault(user,0)user_dic[user] += 1print(user_dic)

那为什么setdefault有这个功能呢,查看其代码

    def setdefault(self, *args, **kwargs): # real signature unknown"""Insert key with a value of default if key is not in the dictionary.Return the value for key if key is in the dictionary, else default."""pass

即是如果key不在字典中,则插入key值;如果key在字典中,则返回key的值,否则返回default

接着对其再进行优化

#encoding:utf-8from collections import defaultdictusers = ["bobby1","bobby2","bobby3","bobby2","bobby4","bobby5","bobby4"]default_dic = defaultdict(int)
for user in users:default_dic[user] += 1print(default_dic)

因此针对以上特性,从而有对于Python中通过Key访问字典,当Key不存在时,会引发‘KeyError’异常。为了避免这种情况的发生,可以使用collections类中的defaultdict()方法来为字典提供默认值。

defaultdict接受一个工厂函数作为参数,如下来构造:

dict =defaultdict( factory_function)

这个factory_function可以是list、set、str等等,作用是当key不存在时,返回的是工厂函数的默认值,比如list对应[ ],str对应的是空字符串,set对应set( ),int对应0

使用list作第一个参数,可以很容易将键-值对序列转换为列表字典。

from collections import defaultdict
s=[('yellow',1),('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d=defaultdict(list)
for k, v in s:d[k].append(v)
a=sorted(d.items())
print(a)

2、规避字典中无键值的参数传递

其实我自己用的collections较多的是传递参数时,如果传了该参数则使用参数,如果没有传递参数则使用默认值

from collections import defaultdictdef proposeIBPS101(newDic = {}):# receiptAccount=收方账户,amount=金额:tempDic = defaultdict(dict)tempDic.update(newDic)newDic = tempDicvalues = {"receiptAccount":"{}".format(62258487410258011 if not newDic["receiptAccount"] else newDic["receiptAccount"]),"amount":"{}".format(newDic["amount"])}print valuesif __name__ == '__main__':# ex1: 只传递一个参数newDic = {"amount":1.13}proposeIBPS101(newDic)# ex2:传递两个参数newDic = {"receiptAccount":62258487410258022,"amount":1.13}proposeIBPS101(newDic)

输出结果如下:

{'amount': '1.13', 'receiptAccount': '62258487410258011'}
{'amount': '1.13', 'receiptAccount': '62258487410258022'}

在示例一种只传递了一个参数,因此条件表达式中判断为真,直接将默认参数62258487410258011 赋值给receiptAccount账户;第二个传递了账户,则直接使用传递的账户。

3、一个键多个值的字典

如何实现一个键对应多个值的字典,即是(multidict)?

之所以有这个问题是因为在读取DB2的数据库时,存在一个表对应的报文会登记两条记录,只是每个字段对应的值不同,常用的构造一键多值的形式如下:

    dic1 = {'a':["paymentName","paymentAccount"],'b':["receiptName","receiptAccount"],}dic2 = {'a': {"paymentName", "paymentAccount"},'b': {"receiptName", "receiptAccount"},}

或者很方便的使用collections中的defaultdict来构造这样的字典

    tempDic = defaultdict(list)tempDic['a'].append("paymentName")tempDic['a'].append("paymentAccount")print(tempDic)

 

这篇关于collections之defaultdict的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/151969

相关文章

Java重修笔记 第四十九天 Collections 工具类

Collections 工具类 1. public static void reverse(List<?> list)         反转集合中元素的顺序 2. public static void shuffle(List<?> list)         将集合里的元素顺序打乱 3. public static <T extends Comparable<? super T>>

Python模块 - Collections

collections的常用类型有: 计数器(Counter) 双向队列(deque) 默认字典(defaultdict) 有序字典(OrderedDict) 可命名元组(namedtuple) Counter() Counter 作为字典(dict)的一个子类用来进行hashtable计数,将元素进行数量统计、计数后返回一个字典,键值为元素:值为元素个数 s = 'abcbcac

【编程底层思考】详解Java中Collections工具类

Java 的 java.util.Collections 类是一个包装类,它包含了一系列静态方法来操作或返回集合对象。这个类提供了对集合框架的扩展,使得集合的使用更加灵活和强大。以下是 Collections 类的一些关键特性和用途: 静态方法 排序:sort(List list) 可以对列表进行自然顺序排序,sort(List list, Comparator c) 允许使用自定义的比较器进

23. 如何使用Collections.synchronizedList()方法来创建线程安全的集合?有哪些注意事项?

Collections.synchronizedList() 方法用于将一个普通的 List 包装成线程安全的 List。通过这个方法生成的 List,所有的访问和修改操作都会被自动加锁,从而确保在多线程环境下对集合的并发访问是安全的。 如何使用 Collections.synchronizedList() 创建线程安全的集合 以下是使用 Collections.synchronizedL

第一章 集合框架和泛型(ArrayList/LinkedList/HashSet/HashMap/泛型集合/Collections算法类)

第一章 集合框架和泛型 一、Collection 1、Collection 接口存储一组不唯一,无序的对象 二、List List 接口存储一组不唯一,有序(插入顺序)的对象 1.ArrayList 实现了长度可变的数组,在内存中分配连续的空间优点:遍历元素和随机访问元素的效率比较高ArrayList类是List接口的一个具体实现类ArrayList对象实现了可变大小

2024年最新Java面试宝典系列-Collections集合篇1

Java中的集合类有哪些?它们的特点是什么 List:有序集合,允许重复元素,实现类如ArrayList、LinkedList。Set:无序集合,不允许重复元素,实现类如HashSet、TreeSet。Map:键值对集合,一个键对应一个值,实现类如HashMap、Hashtable、TreeMap。 ArrayList、LinkedList与Vector的区别是什么 ArrayList:基于

0基础学习Python路径(29)collections模块

1.简介 collections 是 python 的内置模块,提供了很多方便且高性能的关于集合的操作,掌握这些知识有助于提高代码的性能和可读性。 2.常用功能 2.1 namedtuple 功能详解 namedtuple() 返回一个新的元组子类,且规定了元组的元素的个数,同时除了使用下标获取元素之外,还可以通过属性直接获取。 from collections import named

Collections求数组最值

Integer[] numbers = { 8, 2, 7, 1, 4, 9, 5}; int min = (int) Collections.min(Arrays.asList(numbers)); int max = (int) Collections.max(Arrays.asList(numbers)); System.out.println("最小值: " + min); System.

java中的Collections

Java 的集合框架(Collections Framework)提供了一组标准的数据结构接口和类,用于存储和操作数据。Java 集合类位于 java.util 包中,主要包括以下几个核心接口和实现类。 1. 核心接口 1.1. Collection 接口 Collection 是集合框架的根接口,但它本身并不提供任何直接实现。常见的子接口包括 List、Set 和 Queue。 常用方法

Java中Collections

Collection是集合类的一个顶级接口,其直接继承接口有List与Set 而Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。此类不能实例化。Collections中有一些工具函数,比如说sort、reverse、fill等等。 看到了之后比较的好奇呗,在hashtable的时候进行同步,为了防止引用返回后