标签: defaultdict

更多Pythonic计算重嵌套defaultdict中的东西的方法

我的代码目前必须将事物大量嵌套dict到另一个中.我有需要用3个值索引的项目,然后计算.所以,在我的循环之前,我初始化一个嵌套,defaultdict如下所示:

from collections import defaultdict

type_to_count_dic = defaultdict(
        lambda: defaultdict(
            lambda: defaultdict(int)
        )
    )
Run Code Online (Sandbox Code Playgroud)

这允许我在紧密循环内计算项目,如下所示:

for a in ...:
    for b in ...:
        for c in ...:
            type_to_count_dic[a][b][c] += 1
Run Code Online (Sandbox Code Playgroud)

我觉得初始化所有这些defaultdict感觉就像在Java之类的东西中做类型声明一样.做这样的事情有更多的惯用/ Pythonic方式吗?

python defaultdict

6
推荐指数
1
解决办法
1283
查看次数

*初始化后更改defaultdict*的默认返回值

有没有办法在创建后更改defaultdict的default_factory(在调用不存在的键时返回的值)?

例如,当一个defaultdict如

d = defaultdict(lambda:1)
Run Code Online (Sandbox Code Playgroud)

创建时,d只要d['absent']调用不存在的键,就会返回1 .初始定义之后,如何将此默认值更改为其他值(例如,2)?

python collections defaultdict

6
推荐指数
1
解决办法
1348
查看次数

你为什么需要lambda来嵌套defaultdict?

我有点困惑为什么你需要一个lambda函数来嵌套defaultdict

为什么你不能这样做?

test = defaultdict(defaultdict(list))
Run Code Online (Sandbox Code Playgroud)

代替

test = defaultdict(lambda:defaultdict(float))
Run Code Online (Sandbox Code Playgroud)

python lambda defaultdict

6
推荐指数
1
解决办法
247
查看次数

从defaultdict获取原始密钥集

有没有办法从defaultdict获取原始/一致的密钥列表,即使请求了非现有密钥?

from collections import defaultdict
>>> d = defaultdict(lambda: 'default', {'key1': 'value1', 'key2' :'value2'})
>>>
>>> d.keys()
['key2', 'key1']
>>> d['bla']
'default'
>>> d.keys() # how to get the same: ['key2', 'key1']
['key2', 'key1', 'bla']
Run Code Online (Sandbox Code Playgroud)

python defaultdict

6
推荐指数
1
解决办法
3743
查看次数

用defaultdict不理解这个lambda表达式

我在pythontips看到了这个例子.当defaultdict接受参数"tree"并返回"tree"时,我不明白第二行.

import collections
tree = lambda: collections.defaultdict(tree)
some_dict = tree()
some_dict['color']['favor'] = "yellow"
# Works fine
Run Code Online (Sandbox Code Playgroud)

运行此代码后,我检查了some_dict的类型

defaultdict(< function < lambda > at 0x7f19ae634048 >, 
            {'color': defaultdict(
                  < function < lambda > at 0x7f19ae634048 >, {'favor': 'yellow'})})
Run Code Online (Sandbox Code Playgroud)

python lambda python-3.x defaultdict

6
推荐指数
1
解决办法
202
查看次数

使用 defaultdict 替换 python 中的 try 和/或 if 语句

我最近发现并开始使用默认字典来替换几个更庞大的结构。我在《Python 之禅》中读到,Python 的关键点之一是“应该有一种——最好只有一种——明显的方法来做到这一点。”

基于该标准(或者更实际地基于内存使用情况或速度)以下哪一项(或完全不同的东西)是最好的?我有预感第一个是正确的,但想听听其他人的意见。

my_dict = defaultdict(int)
for generic in iterable:
    my_dict[generic] +=1
Run Code Online (Sandbox Code Playgroud)

或者:

my_dict = {}
for generic in iterable:
    if generic not in my_dict:
        my_dict[generic] = 1
    else:
        my_dict[generic]+=1
Run Code Online (Sandbox Code Playgroud)

或者:

my_dict = {}
for generic in iterable:
    try:
        my_dict[generic] += 1
    except(KeyError):
        my_dict[generic] = 1
Run Code Online (Sandbox Code Playgroud)

使用 my_dict = defaultdict(list) 和使用附加函数也可以这样说。假设使用多个 for 循环或其他条件,而不是简单地从单个可迭代中计算泛型值,因为这显然会具有不同的功能。

python try-catch defaultdict

5
推荐指数
1
解决办法
1288
查看次数

如何从文件中读取两行并在for循环中创建动态键?

在以下数据中,我试图运行一个简单的马尔可夫模型.

假设我有一个具有以下结构的数据:

pos   M1  M2  M3  M4  M5  M6  M7  M8  hybrid_block    S1    S2    S3    S4  S5  S6  S7  S8
1     A   T   T   A   A   G   A   C       A|C         C     G     C     T    T   A   G   A
2     T   G   C   T   G   T   T   G       T|A         A     T     A     T    C   A   A   T
3     C   A   A   C   A   G   T   C       C|G         G     A     C     G    C   G   C   G
4     G   T   G   T   A …
Run Code Online (Sandbox Code Playgroud)

python dictionary numpy pandas defaultdict

5
推荐指数
1
解决办法
160
查看次数

将 dict 转换为 defaultdict

以下代码使用 {} 运算符组合两个 defaultdict。

from collections import defaultdict
aa=defaultdict(str)
bb=defaultdict(str)
aa['foo']+= '1'
bb['bar']+= '2'
cc = {**aa,**bb}
type(cc)
Run Code Online (Sandbox Code Playgroud)

但是,正如我们看到的,如果我们运行它,{}操作符返回一个dict类型而不是一个defaultdict类型。

有没有办法将dict返回到 defaultdict ?

python dictionary python-3.x defaultdict python-collections

5
推荐指数
1
解决办法
1239
查看次数

需要一个 defaultdict,其值为两个列表

在Python中,我想要类似的东西

dict = defaultdict((list,list))
Run Code Online (Sandbox Code Playgroud)

本质上,对于每个键我都想要两个列表!

通过上面的代码片段,我得到错误第一个参数必须是可调用的。我怎样才能做到这一点?

python dictionary defaultdict

5
推荐指数
1
解决办法
3073
查看次数

Python dict 具有基于键的默认值

我需要一个字典,它会自动填充每个缺失的访问键的默认值。我已经找到了defaultdict一些其他方法来实现此目的,但我的情况的问题是我希望每个键的默认值特定于键本身。

例如,defaultdict我可以实现这样的目标:

from collections import defaultdict
d = defaultdict(lambda: 5)
> d[1] = 3
> d[1]
> 3
> d[2]
> 5
Run Code Online (Sandbox Code Playgroud)

但是,如果我需要每个访问的缺失键的默认值,该怎么办key + 5?就像是:

from collections import defaultdict
d = defaultdict(lambda key: key + 5)  # <-- This does not work as defaultdict expects lambda function to be without any parameters
> d[1] = 3
> d[1]
> 3
> d[2]
> 7         <- Calculated from accessed key + 5 (2+5)
> d[5] …
Run Code Online (Sandbox Code Playgroud)

python dictionary python-3.x defaultdict

5
推荐指数
1
解决办法
1619
查看次数