当前位置: 首页 > 面试题库 >

Python-collections.defaultdict如何工作?

夏飞鹏
2023-03-14
问题内容

我已经阅读了python文档中的示例,但仍然无法弄清楚此方法的含义。有人可以帮忙吗?这是python文档中的两个示例

>>> from collections import defaultdict

>>> s = 'mississippi'
>>> d = defaultdict(int)
>>> for k in s:
...     d[k] += 1
...
>>> d.items()
[('i', 4), ('p', 2), ('s', 4), ('m', 1)]

>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
>>> d = defaultdict(list)
>>> for k, v in s:
...     d[k].append(v)
...
>>> d.items()
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]

参数int和目的list是什么?


问题答案:

通常,KeyError如果你尝试使用字典中当前不存在的键来获取项,则Python字典会抛出a 。该defaultdict相反只会创建你尝试访问的任何物品(当然前提是他们还不存在)。为了创建这样的“默认”项目,它调用传递给构造函数的函数对象(更确切地说,它是一个任意的“可调用”对象,其中包括函数和类型对象)。对于第一个示例,使用创建默认项int(),它将返回integer对象0。对于第二个示例,使用创建默认项list(),该默认项返回一个新的空列表对象。



 类似资料:
  • 问题内容: 我无法理解该方法的行为。 如果执行,则返回True。理想情况下,它不是以空字符串开头。 该文档指出: 返回如果字符串以前缀,否则返回。也可以是要查找的前缀的元组。 那么该功能如何工作? 问题答案: 可以用Python代码表示为: 它测试源字符串的第一个字符是否等于前缀。如果传入长度为零的前缀,则表示将测试前0个字符。长度为0的字符串始终等于任何其他长度为0的字符串。 请注意,这也适用于

  • 问题内容: 我正在玩耍并浏览文档,并且遇到了一些魔术。即我正在谈论: 它们如何在内部实现您能够将类似的东西传递给方法的功能?我想这与它有关,但是我正在寻找详细的解释。 问题答案: 他们如何在内部实现将x> 5之类的内容传递给方法的能力? 简短的答案是他们没有。 对numpy数组进行任何形式的逻辑运算都会返回一个布尔数组。(即,,等等都返回给定条件为true的布尔数组)。 例如 产量: 这就是为什么

  • 问题内容: 我对Python引用感到困惑。考虑以下示例: 我的任务: 编辑列表中的每个元素 类似地: 在python中,所有内容都按引用进行操作,那么何时创建新对象?我们总是需要和从模块,使对象副本? 请说清楚。 问题答案: 在Python中,变量不是容纳事物​​的盒子,它是指向对象的名称。在您的代码中: ->将名称绑定到字典 ->将名称绑定到列表 ->将名称绑定到另一个列表 您的第三行不是在改变

  • 问题内容: 我已经成功地使用了Python属性,但看不到它们如何工作。如果我取消引用类之外的属性,我只会得到一个类型的对象: 但是,如果我将一个属性放在一个类中,则行为会大不相同: 我注意到未绑定仍然是对象,因此类实例化必须在做魔术,但是那是什么魔术呢? 问题答案: 正如其他人指出的那样,它们使用称为描述符的语言功能。 当您通过类访问实际属性对象时,返回该属性对象的原因在于该属性如何实现特殊方法:

  • 问题内容: 我对Python中的函数调用有疑问。假设我要编写一个名为superLongFunc(expr)的函数。该函数非常长,而且很难调试。我想将函数拆分为较小的辅助函数,以提高可读性,例如smallFunc1(expr),smallFunc2(expr)等。 我的问题是,这是否会影响代码的性能?调用函数在Python中到底如何工作?Python是否通过引用将变量传递给函数?还是在将变量提供给函

  • 问题内容: 我正在探索python。我对python绑定感到好奇。任何人都可以解释一下,如何有可能从Python访问C库。 问题答案: 有几种方法可以从Python调用用C编写的代码。 首先,标准库中有ctypes模块。它允许您加载动态链接库(Windows上为DLL,Linux上为共享库)并直接从Python调用这些库中的函数。此类库通常用C编写。 其次,对于CPython,有Python /