标签: defaultdict

解析defaultdict字符串

我用一个简单的打印命令转储了多个defaultdict,如下所示:

defaultdict(<type 'list'>, {'actual': [20000.0, 19484.0, 19420.0], 'gold': [20000.0, 19484.0, 19464.0]})
Run Code Online (Sandbox Code Playgroud)

我可以使用一些标准的解析器来检索它们吗?我知道我应该使用pickle,但生成这些defaultdict的代码非常慢,我想避免重新运行它.

python parsing defaultdict

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

Python 字典理解来创建和更新字典

我有一个字典(数据)列表,并希望将其转换为字典(x),如下所示。我正在使用以下“for循环”来实现。

data = [{'Dept': '0123', 'Name': 'Tom'},
        {'Dept': '0123', 'Name': 'Cheryl'},
        {'Dept': '0123', 'Name': 'Raj'},
        {'Dept': '0999', 'Name': 'Tina'}]
x = {}

for i in data:
    if i['Dept'] in x:
        x[i['Dept']].append(i['Name'])
    else:
        x[i['Dept']] = [i['Name']]

Output:
x -> {'0999': ['Tina'], '0123': ['Tom', 'Cheryl', 'Raj']}
Run Code Online (Sandbox Code Playgroud)

是否可以在字典理解或任何其他更pythonic的方式中实现上述逻辑?

python dictionary append defaultdict dictionary-comprehension

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

Python中的嵌套Defaultdicts

我在嵌套的defaultdict中更新列表时遇到问题.

这是我的代码:

a = ['20160115',    'shadyside medical building',   1, 'Review']
b = ['20160115',    'shadyside medical building',   1, 'Video']
c = ['20160215',    'shadyside medical building',   1, 'Video']
d = ['20160215',    'medical building',             1, 'Video']
f = [a,b,c,d]

nested_dict = defaultdict(dict)

for date,keyword,pos,feature in f:
    nested_dict[keyword].update({feature : [pos]})
    nested_dict[keyword].update({feature : [pos]})
Run Code Online (Sandbox Code Playgroud)

这是输出:

{'shadyside medical building': 
                             {'Review': [1], 
                             'Video': [1]}, 
'medical building': 
                   {'Video': [1]}}
Run Code Online (Sandbox Code Playgroud)

所需的输出是:

{'shadyside medical building': 
                             {'Review': [1], 
                             'Video': [1,1]}, 
'medical building': 
                   {'Video': [1]}}
Run Code Online (Sandbox Code Playgroud)

请注意,视频的第二项已添加到视频列表中.

python dictionary defaultdict

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

如何将嵌套的defaultdict()默认为指定长度的列表?

我想知道如何将嵌套的defaultdict默认为列表[0,0,0].例如,我想制作这种分层默认用法.

dic01 = {'year2017': {'jul_to_sep_temperature':[25, 20, 17], 
                      'oct_to_dec_temperature':[10,  8,  7]},
         'year2018': {'jan_to_mar_temperature':[ 8,  9, 10].
                      'apr_to_jun_temperature':[ 0,  0,  0]}
        }
Run Code Online (Sandbox Code Playgroud)

为了做这个嵌套的dictioanry,我做了dic01 = defaultdict(dict)并添加了一个字典作为dic01['year2018']['jan_temperature'] = [8, 9, 10].我的问题是,是否可以在不事先绑定[0,0,0]的情况下更新列表的每个元素.在其他工作中,如果我将defaultdict作为defaultdict(dict),我必须在使用之前绑定列表[0,0,0],并且我想跳过这个绑定过程.

# The way I do this
dic01['year2018']['jul_to_sep_temperature'] = [0,0,0]    # -> how to omit this procedure?
dic01['year2018']['jul_to_sep_temperature'][0] = 25

# The way I want to do this
dic01['year2018']['jul_to_sep_temperature'][0] = 25      # by the end of July
Run Code Online (Sandbox Code Playgroud)

python dictionary defaultdict

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

Python enum.Enum 创建别名而不是新值

我刚刚注意到 pyhton 中 Enum+defaultdict 的一个非常奇怪的行为。我定义了一个这样的枚举,它收集一些默认字典:

from enum import Enum
from collections import defaultdict

class A(Enum):
     a = defaultdict(lambda: 1)
     b = defaultdict(lambda: 2)
Run Code Online (Sandbox Code Playgroud)

然后,当我查看 A 里面的内容时:

In [11]: A.a
Out[11]: <A.a: defaultdict(<function A.<lambda> at 0x7f773f03b510>, {})>

In [12]: A.b
Out[12]: <A.a: defaultdict(<function A.<lambda> at 0x7f773f03b510>, {})>
Run Code Online (Sandbox Code Playgroud)

SoA.b只是 的别名A.a。对我来说,这看起来很像一个错误,即使背后可能有一些充分的理由。任何想法?

附录

由于它出现在评论中,因此需要说明为什么要在枚举中放入字典。我发现将常量分组到命名空间中通常很有用,这样就可以访问A.a.constant1A.b.constant1等值。目前,尝试使用 Enums 执行此操作会引发AttributeError. 当然,人们可以这样做:

class A:
    class a(Enum):
        constant1 = 1
    class b(Enum):
        constant1 = 2
Run Code Online (Sandbox Code Playgroud)

然而,这并没有利用 Enum 的功能(迭代、访问__getitem__等)。

python enums alias defaultdict

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

在Python中填充空字典

我在用 Python 填充空字典时遇到问题

我将字典声明如下:

my_dict = {}
Run Code Online (Sandbox Code Playgroud)

我想一次用不同的键和不同的值填充它。我想最后有这样的东西:

{"1":(1,2,3,4),"2":(4,5,6,7),"3":(8,9,10,11),"4":(12,13,14,15)}
Run Code Online (Sandbox Code Playgroud)

因此我尝试这样做:

for i in range(4):
    for j in range(4):
         my_dict[str(i)].append(j)
Run Code Online (Sandbox Code Playgroud)

但我在第一个循环时出现以下错误:

KeyError Traceback(最近一次调用最后一次) in () 2 for i in range(4): 3 for j in range(4): ----> 4 my_dict[str(i)].append(j)
KeyError: ' 0'

我的代码中有一个更复杂的 for 循环,但我尝试尽可能更通用,以帮助其他可能遇到类似问题的人。最后我想为每个键设置不同大小的值。

如果您知道为什么它不起作用以及如何修复它,请随时回答。

编辑

抱歉造成混乱,我想要类似以下的内容:

{'1': [1, 2, 3, 4],
             '2': [5, 6, 7, 8],
             '3': [9, 10, 11, 12],
             '4': [13, 14, 15, 16]})
Run Code Online (Sandbox Code Playgroud)

python dictionary list python-3.x defaultdict

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

Julia DefaultDict 对每个键使用相同的值(数组)

我想创建一个默认的数组字典。问题是,它为每个键使用相同的数组。

# using Pkg
# Pkg.add("DataStructures")
using DataStructures: DefaultDict
genome = DefaultDict{Tuple{String, String}, Array{Int64, 1}}(Int64[])
push!(genome["chr1", "+"], 5)
# 1-element Array{Int64,1}:
# 5

push!(genome["chrX", "-"], 10)
# 2-element Array{Int64,1}:
#  5
# 10
Run Code Online (Sandbox Code Playgroud)

我尝试给它提供一个 lambda 来创建一个新数组x -> Int64,但这只是给出了类型错误。

data-structures defaultdict julia

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

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

如何从列表列表创建字典键?

字符串列表:

['Georgie Porgie', 87, '$$$', ['Canadian', 'Pub Food'], 'Queen St. Cafe', 82, '$', ['Malaysian', 'Thai'], 'Dumplings R Us', 71, '$', 'Chinese', 'Mexican Grill', 85, '$$', 'Mexican', 'Deep Fried Everything', 52, '$', 'Pub Food']
Run Code Online (Sandbox Code Playgroud)

我正在尝试从上面的列表中创建一个cuine_to_names 字典。菜系在索引 3 处,有时是它们自己的迷你清单。餐厅名称在索引 0 处。它们每四个索引重复一次。美食 - 3::4,名称 - 0::4。

我遇到的问题是从索引 3::4 中提取元素并将它们设为键。我认为麻烦来了,因为有时它们是一个字符串的迷你列表,有时它们只是一个字符串。这使得使用 defaultdict 对我来说很困难,但我是学习该功能的新手。我看到其他一些答案包括 setdefault 之类的东西,但我不知道如何在这种特定情况下使用它。任何指导将不胜感激!

我想要这个输出:

Cuisine to list of restaurant names:
# dict of {str, list of str}
{'Canadian': ['Georgie Porgie'],
 'Pub Food': ['Georgie Porgie', 'Deep Fried Everything'],
 'Malaysian': ['Queen St. Cafe'],
 'Thai': ['Queen …
Run Code Online (Sandbox Code Playgroud)

python dictionary list setdefault defaultdict

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

为什么collections.deque比collections.defaultdict慢?

请原谅我以这样一般的方式询问,因为我确信他们的表现取决于他们如何使用它们,但在我的情况下collections.deque,比collections.defaultdict我想要验证值的存在时要慢.

我使用Peter Norvig拼写校正来验证用户对一小组单词的输入.由于我没有使用带有单词频率的字典,所以我使用了一个简单list而不是defaultdict一开始,但是deque一旦我注意到单个单词查找花了大约25秒就用它替换它.

令人惊讶的是,这并不比使用a更快,list所以我defaultdict几乎立即返回使用返回的结果.

有人可以向我解释这种性能差异吗?

提前致谢


PS:如果你们中的一个想要重现我正在谈论的内容,请在Norvig的脚本中更改以下行.

-NWORDS = train(words(file('big.txt').read()))
+NWORDS = collections.deque(words(file('big.txt').read()))

-return max(candidates, key=NWORDS.get)
+return candidates
Run Code Online (Sandbox Code Playgroud)

python performance spell-checking deque defaultdict

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