相关疑难解决方法(0)

创建或附加到字典中的列表 - 这可以缩短吗?

这个Python代码可以缩短,并且仍然可以使用itertools和sets读取吗?

result = {}
for widget_type, app in widgets:
    if widget_type not in result:
        result[widget_type] = []
    result[widget_type].append(app)
Run Code Online (Sandbox Code Playgroud)

我只能想到这个:

widget_types = zip(*widgets)[0]
dict([k, [v for w, v in widgets if w == k]) for k in set(widget_types)])
Run Code Online (Sandbox Code Playgroud)

python dictionary

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

不能pickle defaultdict

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

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

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

python pickle defaultdict

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

Python和默认dict,如何pprint

我正在使用默认字典.我需要pprint.

然而,当我pprint......这就是它的样子.

defaultdict(<functools.partial object at 0x1f68418>, {u'300:250': defaultdict(<functools.partial object at 0x1f683c0>, {0: defaultdict(<type 'list'>, {u'agid1430864021': {u'status': u'0', u'exclude_regi..........
Run Code Online (Sandbox Code Playgroud)

如何pprint使用默认字典?

python

32
推荐指数
4
解决办法
1万
查看次数

将`defaultdict`暴露为常规`dict`

defaultdict(set)用来填充非常大的数据结构中的内部映射.填充后,整个结构(包括映射)将暴露给客户端代码.那时,我不希望任何人修改映射.

并且没有人故意这样做.但有时,客户端代码可能会意外地引用不存在的元素.此时,普通字典会引发KeyError,但由于映射是defaultdict,它只是在该键上创建一个新元素(空集).这很难理解,因为一切都是默默无闻的.但我需要确保不会发生这种情况(语义实际上不会中断,但映射会变得很大).

我该怎么办?我可以看到这些选择:

  1. 查找当前和未来客户端代码中的所有实例,其中对映射执行字典查找,并将其转换为其他实例mapping.get(k, {}).这太可怕了.

  2. defaultdict数据结构完全初始化后,通过将其转换为"冻结" dict.(我知道它并没有真正冻结,但我相信客户端代码实际上并没有写mapping[k] = v.)不雅,并且性能大.

  3. 包装defaultdict成一个dict界面.这样做的优雅方式是什么?我担心性能损失可能很大(这种查找在紧密循环中被大量使用).

  4. 子类defaultdict并添加一个"关闭"所有defaultdict功能的方法,使其表现得像是常规的dict.这是上面3的变种,但我不确定它是否更快.如果不依赖于实施细节,我不知道它是否可行.

  5. dict在数据结构中使用regular ,重写那里的所有代码,首先检查元素是否在字典中,如果不在,则添加它.不好.

python wrapper python-3.x defaultdict

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

如何将defaultdicts [defaultdicts]的defaultdict转换为dicts [of dicts]的dict?

使用这样的回答,我创建了一个defaultdictdefaultdict秒.现在,我想把那个深层嵌套的dict对象变回普通的python dict.

from collections import defaultdict

factory = lambda: defaultdict(factory)
defdict = factory()
defdict['one']['two']['three']['four'] = 5

# defaultdict(<function <lambda> at 0x10886f0c8>, {
#             'one': defaultdict(<function <lambda> at 0x10886f0c8>, {
#                 'two': defaultdict(<function <lambda> at 0x10886f0c8>, {
#                     'three': defaultdict(<function <lambda> at 0x10886f0c8>, {
#                         'four': 5})})})})
Run Code Online (Sandbox Code Playgroud)

我认为这不是正确的解决方案:

import json

regdict = json.loads(json.dumps(defdict))

# {u'one': {u'two': {u'three': {u'four': 5}}}}
Run Code Online (Sandbox Code Playgroud)

此外,这个答案是不充分的,因为它没有递归嵌套的字典.

python collections dictionary python-2.7

20
推荐指数
2
解决办法
5124
查看次数

如何为无意识的客户端设置defaultdict安全?

有几次(甚至连续几次)我被defaultdict错误所困扰:忘记了某些东西实际上是一个默认的,并把它当成一个普通的字典.

d = defaultdict(list)

...

try:
  v = d["key"]
except KeyError:
  print "Sorry, no dice!"
Run Code Online (Sandbox Code Playgroud)

对于那些被咬过的人来说,问题很明显:当d没有键'key'时,v = d["key"]神奇地创建一个空列表并将其分配给两者d["key"]v不是引发异常.如果d来自某些模块,其中的细节不太清楚,那么追踪可能会非常痛苦.

我正在寻找一种方法来消除这个bug.对我来说,最好的解决方案是以某种方式禁用defaultdict的魔法,然后再将其返回给客户端.

python default-value

6
推荐指数
3
解决办法
1518
查看次数

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

将现有的 defaultdict 输出为耀斑树状图的适当 JSON 格式?

我有一个defaultdict(list),我用来simplejson.dumps(my_defaultdict)将其输出defaultdict为 JSON 格式。我正在使用来自http://bl.ocks.org/mbostock/4063570 的树状图的 HTML 代码,但我试图将我的defaultdict信息转换为作者正在使用的 JSON 文件的格式。此 JSON 文件名为:/mbostock/raw/4063550/flare.JSON并且可以在此链接中找到:http://bl.ocks.org/mbostock/raw/4063550/flare.json

所以这是我的 defaultdict 数据:

my_defaultdict = {5: ['child10'], 45: ['child92', 'child45'], 33:['child38']}

json_data = simplejson.dumps(my_defaultdict)
Run Code Online (Sandbox Code Playgroud)

所以我当前的 json_data 看起来像这样:

{
"5": [
        "child10"
], 
"45": [
    "child92", 
    "child45"
], 
"33": [
    "child38"
]
}
Run Code Online (Sandbox Code Playgroud)

因此,在我的理解中,数字将是相应的“名称”:“5”,然后我的 JSON 格式文件也会将孩子作为“孩子”。就像现在一样,我的 JSON 格式输出不在树状图的 HTML 代码中运行。

预期的结果是这样的:

{
 "name": "flare",
     "children": [
  {
   "name": "5",
   "children": [
    {
     "name": "child10", "size": 5000},
     ] …
Run Code Online (Sandbox Code Playgroud)

html python json

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