标签: defaultdict

宽容的字典

我想知道如何创建宽容字典(如果引发KeyError则返回默认值).

在下面的代码示例中,我将得到一个KeyError; 例如

a = {'one':1,'two':2}
print a['three']
Run Code Online (Sandbox Code Playgroud)

为了不得到一个我将1.必须捕获异常或使用获取.

我不想用我的字典那样做...

python dictionary defaultdict dictionary-missing

9
推荐指数
3
解决办法
677
查看次数

使用空的numpy数组创建一个defaultdict

我想知道是否有更聪明的方法来从集合中创建默认字典.dict应该有一个空的numpy ndarray作为默认值.

到目前为止,我最好的结果是:

import collections
d = collections.defaultdict(lambda: numpy.ndarray(0))
Run Code Online (Sandbox Code Playgroud)

但是,我想知道是否有可能跳过lambda术语并以更直接的方式创建dict.喜欢:

d = collections.defaultdict(numpy.ndarray(0))  # <- Nice and short - but not callable
Run Code Online (Sandbox Code Playgroud)

python collections numpy defaultdict

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

用于大型数据集的Python defaultdict

defaultdict用来存储数百万个短语,所以我的数据结构看起来像mydict['string'] = set(['other', 'strings']).它似乎适用于较小的套装但是当我击中任何超过1000万个按键时,我的程序只是崩溃了有用的信息Process killed.我知道defaultdict内存很重,但是有一个使用defaultdicts 存储的优化方法还是我必须查看其他数据结构,如numpy数组?

谢谢

python numpy large-data defaultdict

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

Python - 什么时候可以按名称传递位置参数,什么时候不能?

collections.defaultdict当您将default_factory作为位置参数传递时,Python 2.7.5 似乎才有效 - 当您将其作为命名参数传递时,它会中断.

如果您运行以下代码,您将看到default_dict_success()运行正常,但default_dict_failure()抛出一个KeyError.

from collections import defaultdict

test_data = [
    ('clay', 'happy'),
    ('jason', 'happy'),
    ('aj', 'sad'),
    ('eric', 'happy'),
    ('sophie', 'sad')
]

def default_dict_success():
    results = defaultdict(list)
    for person, mood in test_data:
        results[mood].append(person)
    print results


def default_dict_failure():
    results = defaultdict(default_factory=list)
    for person, mood in test_data:
        results[mood].append(person)
    print results


default_dict_success()
default_dict_failure()
Run Code Online (Sandbox Code Playgroud)

输出是

# First function succeeds
defaultdict(<type 'list'>, {'sad': ['aj', 'sophie'], 'happy': ['clay', 'jason', 'eric']})

# Second function fails
Traceback (most recent …
Run Code Online (Sandbox Code Playgroud)

python parameters arguments defaultdict

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

如何从文件中读取两行并在for循环中创建动态键,后续操作

这个问题遵循问题:如何从文件中读取两行并在for循环中创建动态键?

但是,问题的性质已演变为我想要解决的某种复杂性.

下面是按空格分隔的数据结构.

chr pos         M1  M2  Mk  Mg1  F1_hybrid     F1_PG    F1_block    S1  Sk1   S2    Sj
2   16229767    T/T T/T T/T G/T C|T 1|0 726  .  T/C T/C T/C
2   16229783    C/C C/C C/C A/C G|C 0|1 726 G/C G/C G/C C|G
2   16229992    A/A A/A A/A G/A G|A 1|0 726 A/A A/A A/A A|G
2   16230007    T/T T/T T/T A/T A|T 1|0 726 A|T A|T A|T A|T
2   16230011    G/G G/G G/G G/G C|G 1|0 726 G/C C|G …
Run Code Online (Sandbox Code Playgroud)

python dictionary numpy pandas defaultdict

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

如何用键初始化defaultdict?

我有一个列表字典,它应该用默认密钥初始化.我猜,下面的代码不好(我的意思是,它有效,但我觉得它不是用pythonic方式编写的):

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

所以我想使用更像pythonic的东西defaultict:

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

但是,我见过的每个教程都会动态设置新密钥.但在我的情况下,所有的键都应该从一开始就定义.我正在解析其他数据结构,只有当结构中的特定键也包含在我的字典中时,才会向我的字典添加值.

如何设置默认密钥?

python defaultdict python-collections

9
推荐指数
4
解决办法
7119
查看次数

如何在没有类型的情况下打印defaultdict变量?

在以下代码中:

from collections import defaultdict

confusion_proba_dict = defaultdict(float)

for i in xrange(10):
    confusion_proba_dict[i] = i + 10

print confusion_proba_dict
Run Code Online (Sandbox Code Playgroud)

输出是:

defaultdict(<type 'float'>, {0: 10, 1: 11, 2: 12, 3: 13, 4: 14, 5: 15, 6: 16, 7: 17, 8: 18, 9: 19})
Run Code Online (Sandbox Code Playgroud)

但是,我需要输出为:

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

我该怎么做?

python dictionary defaultdict

8
推荐指数
3
解决办法
7428
查看次数

如何继承defaultdict并在子类方法中使用其copy方法?

有代码.

from collections import defaultdict
class A(defaultdict):
  def __init__(self):
    super(A, self).__init__(lambda :0)
    self.x = 1

  def my_copy(self):
    return self.copy()

if __name__ == '__main__':
  a = defaultdict(lambda :0)
  b = a.copy() # no error when using the base class directly
  a = A()
  b = a.my_copy()
Run Code Online (Sandbox Code Playgroud)

有错误:

Traceback (most recent call last):
  File "/Applications/PyCharm.app/Contents/helpers/pydev/pydevd.py", line 1591, in <module>
    globals = debugger.run(setup['file'], None, None, is_module)
  File "/Applications/PyCharm.app/Contents/helpers/pydev/pydevd.py", line 1018, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "/Applications/PyCharm.app/Contents/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, …
Run Code Online (Sandbox Code Playgroud)

python collections inheritance copy defaultdict

7
推荐指数
2
解决办法
1225
查看次数

使用 lambda 和 defaultdict

我正在阅读有关集合 defaultdict 的信息,并遇到了以下代码行:

import collections
tree = lambda: collections.defaultdict(tree)
some_dict = tree()
some_dict['colours']['favourite'] = "yellow"
Run Code Online (Sandbox Code Playgroud)

我知道lamba接受一个变量并对其执行一些功能。我见过 lambda 是这样使用的: lambda x: x + 3 在上面的第二行代码中,lambda 使用什么变量,它执行什么功能?

我也明白 defaultdict 可以采用 int 或 list 等参数。在第二行中,defaultdict 接受参数树,它是一个变量。那有什么意义呢?

python lambda defaultdict

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

如何在Python 3.7中订购Counter/defaultdict?

我们知道在Python 3.6中,字典是作为实现细节排序的插入,并且可以依赖3.7插入顺序.

我希望这也适用于dict诸如collections.Counter和的子类collections.defaultdict.但这似乎只适用于defaultdict此案.

所以我的问题是:

  1. 维持订购是否属实defaultdict但不适用于Counter?如果是这样,是否有直接的解释?
  2. 是否应该dictcollections模块中这些子类的顺序视为实现细节?或者,例如,我们可以依赖defaultdictdictPython 3.7+ 那样的插入顺序吗?

以下是我的基本测试:

dict:有序

words = ["oranges", "apples", "apples", "bananas", "kiwis", "kiwis", "apples"]

dict_counter = {}
for w in words:
    dict_counter[w] = dict_counter.get(w, 0)+1

print(dict_counter)

# {'oranges': 1, 'apples': 3, 'bananas': 1, 'kiwis': 2}
Run Code Online (Sandbox Code Playgroud)

反:无序

from collections import Counter, defaultdict

print(Counter(words))

# Counter({'apples': 3, 'kiwis': 2, 'oranges': 1, 'bananas': 1})
Run Code Online (Sandbox Code Playgroud)

defaultdict:ordered

dict_dd …
Run Code Online (Sandbox Code Playgroud)

python counter dictionary python-3.x defaultdict

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