相关疑难解决方法(0)

Python:defaultdict的defaultdict?

有没有办法defaultdict(defaultdict(int))让以下代码工作?

for x in stuff:
    d[x.a][x.b] += x.c_int
Run Code Online (Sandbox Code Playgroud)

d需要根据x.ax.b元素进行临时构建.

我可以用:

for x in stuff:
    d[x.a,x.b] += x.c_int
Run Code Online (Sandbox Code Playgroud)

但后来我无法使用:

d.keys()
d[x.a].keys()
Run Code Online (Sandbox Code Playgroud)

python collections

287
推荐指数
6
解决办法
7万
查看次数

不能pickle defaultdict

我有一个看起来像这样的defaultdict:

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

问题是,我不能用cPickle来腌制它.我在这里找到的解决方案之一是使用模块级函数而不是lambda.我的问题是,什么是模块级功能?如何在cPickle中使用字典?

python pickle defaultdict

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

在javascript中的Defaultdict等价物

在python中,您可以使用defaultdict(int)将int存储为值.如果您尝试对字典中不存在的键执行'get',则默认值为零.

你能在javascript/jquery中做同样的事吗?

javascript jquery

12
推荐指数
3
解决办法
7943
查看次数

与原生pymongo使用相比,Mongoengine在大型文档上的速度非常慢

我有以下mongoengine型号:

class MyModel(Document):
    date        = DateTimeField(required = True)
    data_dict_1 = DictField(required = False)
    data_dict_2 = DictField(required = True)
Run Code Online (Sandbox Code Playgroud)

在某些情况下,DB中的文档可能非常大(大约5-10MB),而data_dict字段包含复杂的嵌套文档(dicts列表的字典等等).

我遇到过两个(可能是相关的)问题:

  1. 当我运行本机pymongo find_one()查询时,它会在一秒钟内返回.当我运行MyModel.objects.first()时需要5-10秒.
  2. 当我从数据库查询单个大型文档,然后访问其字段时,只需执行以下操作需要10-20秒:

    m = MyModel.objects.first()
    val = m.data_dict_1.get(some_key)
    
    Run Code Online (Sandbox Code Playgroud)

对象中的数据不包含对任何其他对象的任何引用,因此它不是取消引用的对象的问题.
我怀疑它与mongoengine的内部数据表示的某些低效率有关,这会影响文档对象的构造以及字段访问.我能做些什么来改善这个吗?

python mongodb pymongo mongoengine

12
推荐指数
1
解决办法
3248
查看次数

熊猫到D3.将数据帧序列化为JSON

我有一个包含以下列的DataFrame,没有重复项:

['region', 'type', 'name', 'value']
Run Code Online (Sandbox Code Playgroud)

可以看作层次结构如下

grouped = df.groupby(['region','type', 'name'])
Run Code Online (Sandbox Code Playgroud)

我想将此层次结构序列化为JSON对象.

如果有人感兴趣,那么这背后的动机就是最终将这样一个需要JSON文件的可视化组合在一起.

为此,我需要转换grouped为以下内容:

new_data['children'][i]['name'] = region
new_data['children'][i]['children'][j]['name'] = type
new_data['children'][i]['children'][j]'children'][k]['name'] = name
new_data['children'][i]['children'][j]'children'][k]['size'] = value
...
Run Code Online (Sandbox Code Playgroud)

其中region,type,name对应于不同的水平层次结构的(由索引i,jk)

在Pandas/Python中有一种简单的方法可以做到这一点吗?

python json pandas d3.js

8
推荐指数
1
解决办法
1823
查看次数

Python与嵌套dicts键的dicts汇总列表

我有一个dicts列表,并希望设计一个函数来输出一个新的dict,其中包含列表中所有dicts的每个唯一键的总和.

对于列表:

[
    {
         'apples': 1,
         'oranges': 1,
         'grapes': 2
    },
    {
         'apples': 3,
         'oranges': 5,
         'grapes': 8
    },
    {
         'apples': 13,
         'oranges': 21,
         'grapes': 34
    }
]
Run Code Online (Sandbox Code Playgroud)

到目前为止一切都很好,这可以通过一个计数器完成:

def sumDicts(listToProcess):
    c = Counter()
    for entry in listToProcess:
        c.update(entry)
    return (dict(c))
Run Code Online (Sandbox Code Playgroud)

哪个正确返回:

{'apples': 17, 'grapes': 44, 'oranges': 27}
Run Code Online (Sandbox Code Playgroud)

当我的列表中的dicts开始包含嵌套的dicts时出现问题:

[
    {
        'fruits': {
            'apples': 1,
            'oranges': 1,
            'grapes': 2
            },
        'vegetables': {
            'carrots': 6,
            'beans': 3,
            'peas': 2
        },
        'grains': 4,
        'meats': 1  
    },
    {
        'fruits': {
            'apples': 3,
            'oranges': …
Run Code Online (Sandbox Code Playgroud)

python recursion dictionary

7
推荐指数
1
解决办法
139
查看次数

用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
查看次数

Pandas 数据框到分层字典

我有一个 4 列的 DataFrame

Subject_id    Subject         Time  Score    
Subject_1        Math          Day      1     
Subject_1        Math        Night      2                           
Subject_1       Music          Day      3
Subject_1       Music        Night      4
Subject_2        Math          Day      5       
Subject_2        Math        Night      6                              
Subject_2       Music          Day      7
Subject_2       Music        Night      8
Run Code Online (Sandbox Code Playgroud)

我想对这些列进行分层分组并将它们转换为字典,如下所示:

result = {
    'Subject_1': {
        'Math': {
            'Day': 1,
            'Night': 2 
        },
        'Music': {
            'Day': 3,
            'Night': 4
        }
    }
    'Subject_2': {
        'Math': {
            'Day': 5,
            'Night': 6
        },
        'Music': {
            'Day': 7,
            'Night': 8
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我设法 …

python dictionary dataframe pandas

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

用于dict的Python元组列表

有一个python列表

[('schema1', 'table1', 'column_name1'), ('schema1', 'table1', 'column_name2'), ('schema1', 'table2', 'column_name3'), ('schema2', 'table3', 'column_name4')]
Run Code Online (Sandbox Code Playgroud)

我需要将它转换为具有以下结构的python dict

schema1:
            table1:
                    (column_name1,
                    column_name2)
            table2:
                    (column_name3)
schema2:
            table3:
                    (column_name4)
Run Code Online (Sandbox Code Playgroud)

有没有有效的转换方式?

python dictionary list python-3.x defaultdict

3
推荐指数
2
解决办法
75
查看次数

在Python中创建任意深度的嵌套字典

我想创建一个字典,我可以在嵌套字典的深处分配一个值,而无需首先显式创建外层。这是我希望能够做到的:

d = {} # or whatever Python object works
d['a']['b']['c'] = 3
Run Code Online (Sandbox Code Playgroud)

到目前为止,这是我尝试过的:

如果我有一本普通的字典,我可以像这样分配一个键:

d = {}
d['a'] = 1
Run Code Online (Sandbox Code Playgroud)

但不是这样的:

d['a']['b'] = 2
Run Code Online (Sandbox Code Playgroud)

但是,我可以使用 adefaultdict来做到这一点,如下所示:

from collections import defaultdict
dd = defaultdict(dict)
dd['a']['b'] = 2
Run Code Online (Sandbox Code Playgroud)

但是,我仍然做不到深度嵌套的字典

from collections import defaultdict
dd = defaultdict(dict)
dd['a']['b']['c'] = 3
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用递归函数来做到这一点,但我希望有一种简单的方法来做到这一点。有没有?

编辑:

我也尝试过这个但没有成功:

from collections import defaultdict
dd = defaultdict(defaultdict)
dd['a']['b']['c'] = 3
Run Code Online (Sandbox Code Playgroud)

python dictionary

2
推荐指数
1
解决办法
674
查看次数

从密钥列表创建嵌套字典的方法

我想从保存密钥的任意元组/列表创建一个空的嵌套字典.我试图找到一种在Python中执行此操作的简单方法.它看起来像集合defaultdict应该处理的东西,但我似乎无法搞清楚.

keys = ('a', 'b', 'c')
Run Code Online (Sandbox Code Playgroud)

一本字典最终看起来像这样:

d = {
    'a': {
          'b': {
                'c': {}
               }
          }
     }
Run Code Online (Sandbox Code Playgroud)

python dictionary

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

在Python中初始化defaultdict

在搜索Python Doc之后,一个愚蠢的问题,对于defaultdict的构造函数,只有一个参数,即值的类型。有没有办法指定密钥类型?我读了一些示例,似乎没有人指定键的类型,而只是指定了值的类型。以及是否需要-有兴趣了解为什么defaultdict只需要指定值的类型。

预先感谢林

python

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