问题标签 [defaultdict]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3684 浏览

python - collections.defaultdict 是线程安全的吗?

我根本没有在 Python 中使用过线程,并且作为一个完全陌生的人问这个问题。

我想知道是否defaultdict是线程安全的。让我解释一下:

我有

默认情况下会为丢失的键创建一个列表。假设我有多个线程同时开始执行此操作:

最后,我应该以['value', 'value']. 但是,如果defaultdict不是线程安全的,如果线程1在检查之后和之前 让给线程2,就会导致交错,另一个线程可能会在其中创建列表并追加。if 'key' in dictd['key'] = default_factory()d['key']'value'

然后当线程 1再次执行时,它会继续执行,d['key'] = default_factory()这会破坏现有的列表和值,我们最终会进入['key'].

我查看了 defaultdict 的 CPython 源代码。但是,我找不到任何锁或互斥锁。我猜它不是线程安全的,只要它被记录在案。

昨晚在 IRC 上有些人说 Python 上有 GIL,所以它在概念上是线程安全的。有人说线程不应该在 Python 中完成。我很困惑。想法?

0 投票
2 回答
109 浏览

python - 获取许多包含某个键的默认字典的值

我有几个defaultdict看起来像这样:

我需要从每个共享相同索引的默认字典中获取字符串。像这样的东西:

但我必须为 30+ defaultdict 做这件事,那么如果不写上面那个可怕的循环,怎么能做到呢?

有没有办法使用相同的键获取 defaultdict 的所有值,然后轻松输出这些值?

它应该输出由对 all 共享相同键的值组成的元组组合dicts,例如:

0 投票
0 回答
447 浏览

python - 将制表符分隔的文件读入默认字典 - Python

我有一个数据文件,其格式类似于id<tab>data每行,其中每个数据值可能超过 1id个,反之亦然,例如:

而且我想出了一个将数据文件读入 a 的函数defaultdict,其中默认选项是使用idas 键,有时使用数据 askey也很有用。

所需的输出是defaultdict键和值所在的位置iddata反之亦然。除了用上面的函数读取数据。

有没有更好的方法来获得相同的defaultdict输出?数据文件中的行数范围为 1000 - 100,000,在某些情况下高达 100 万。

除了将数据文件读入 a 之外defaultdict,还有其他更合适的原生数据结构吗?数据的使用只是为了让我可以使用或键查询dictionar输出。iddata

0 投票
2 回答
631 浏览

python - 创建具有自然下标的 3 维 OrderedDict

我想要一个具有以下属性的字典结构:

  1. 双重嵌套(所以,在这么多单词中是 3 维的)
  2. 记住每个级别添加到其中的事物的顺序

所以,如果我像这样向它添加项目:

以下理解的结果:

将会:

我尝试使用 adefaultdict来为新键强制执行此结构,因此我不必长时间键入它,如下所示:

但是defaultdict不记得前两个级别的顺序。我不确定如何合并行为,因此显然前两个级别正在产生defaultdict行为,因为我已声明d如此。我怎样才能实现我想要的结构?

0 投票
2 回答
128 浏览

python - 在 Python 字典中对项目进行分组,然后在组中挑选出这些项目

我什至不确定我的措辞是否正确,但我很难理解这一点。我有一组组、描述、个人和数字的数据集。有些人可以在不同的群体中。有些可以有相同的描述。一个示例可能如下所示:

我试图完成的是为组/描述中的每个人获得一定的百分比。所以首先,我遍历数据并添加到一个数组中。然后我用它来创建一个默认字典。

我需要从这里做的是我感到困惑的地方。这是我正在使用的一个实际示例:

所以我得到了这些数字的总和,3.71。我的下一步是在该组中选择一个人,然后将他们的人数除以他们组的总数。以上面那个组中的 PERSON C 为例,我会得到 0.36/3.71 = 0.097。我不知道如何将它放入我的代码中,但它似乎一点也不难——但我只是没有看到它。在此之后我还有其他几个步骤,但我认为一旦我知道如何获得这个特定百分比,我就可以弄清楚其余的。

0 投票
2 回答
3516 浏览

python - 不插入缺失值的 Python defaultdict

因此,defaultdict 文档提到,如果缺少某个项目,则default_factory“将其返回的值插入到键的字典中,并返回”。大多数时候这很好,但在这种情况下我真正想要的是返回值但插入到 defaultdict 中。

我想我可能可以继承 defaultdict 并覆盖......我猜__missing__?没有把握。解决这个问题的最佳方法是什么?

提前致谢。

0 投票
2 回答
3363 浏览

python - 使用元组键python在字典中嵌套循环元组值

我有一个默认字典,其中键是 4 元组(基因区域、物种、本体、长度)。

循环它很简单:

但是,我想以嵌套方式对其进行迭代,如下所示:

我该怎么做呢?除了首先收集价值之外没有其他方法吗?或者使用下面的 dum-dum 方式:

0 投票
1 回答
2164 浏览

python - 将参数传递给由 defaultdict 创建的对象

我希望在构造新对象时有一个包含参数的默认字典。这可能吗,有更好的方法吗?

然后是我的obj:

0 投票
1 回答
352 浏览

python - defaultdict constant_factory 未按预期运行

我愿意使用更适合我的目的defaultdictad hoc 。 default_factorydefault_factory[0,0]

我已经实现了一个constant_factory功能:

然后当我尝试使用它时,我defaultdict有一个意想不到的行为(至少是我没想到的行为)。

这是一个例子:

相反,我想得到:defaultdict(<method-wrapper 'next' of itertools.repeat object at 0x000000000355FC50>, {0: [1, 0], 1: [1, 0], 2: [1, 0], 3: [1, 0], 4: [1, 0], 5: [1, 0], 6: [1, 0], 7: [1, 0], 8: [1, 0], 9: [1, 0]})

看来,每次我愿意增加与 key 对应的列表的第一个槽的i值时,它都会增加第一个槽的所有值。

由于我对使用 defaultdict 和方法包装器很陌生,任何人都可以解释我做错了什么,因为我相信 Python 做得很好吗?

0 投票
2 回答
113 浏览

data-structures - 具有未定义索引默认值的最快数据结构?

我正在尝试创建一个二维数组,当我访问索引时,将返回该值。但是,如果访问未定义的索引,它会调用回调并用该值填充索引,然后返回该值。

该数组也将具有负索引,但我可以通过使用 4 个数组(每个象限 0,0 左右一个)来克服这个问题。