相关疑难解决方法(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万
查看次数

在Python中初始化词典的最佳方法是什么?

在Perl很多次,我会做这样的事情:

$myhash{foo}{bar}{baz} = 1
Run Code Online (Sandbox Code Playgroud)

我怎么把它翻译成Python?到目前为止,我有:

if not 'foo' in myhash:
    myhash['foo'] = {}
if not 'bar' in myhash['foo']:
    myhash['foo']['bar'] = {}
myhash['foo']['bar']['baz'] = 1
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

python autovivification

79
推荐指数
3
解决办法
7万
查看次数

不能pickle defaultdict

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

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

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

python pickle defaultdict

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

酸洗包裹部分功能

我正在尝试使用部分函数创建一个可选择的装饰器.但是,在尝试这样做时,我一直遇到酸洗错误.

第一个天真的例子如下:

def decorator(func):
  def wrapper(**kwargs):
    return partial(func, **kwargs)
  return wrapper

@decorator
def decorated(x, y=1, z=2):
  return x+y+z

y5 = decorated(y=5)
pickle.dumps(y5)
Run Code Online (Sandbox Code Playgroud)

从何partial而来functools.

一点不天真的尝试涉及@wraps在上面添加一行def wrapper.这没有用.

我不确定我是否理解酸洗是如何起作用的.

python decorator pickle partial

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

检查Python多级字典的最佳方法

目前我使用以下方法,假设字典

data[a][b][c]
Run Code Online (Sandbox Code Playgroud)

我用:

if "a" in data and "b" in data["a"] and "c" in data["a"]["b"]:
  ...
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法?

python

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

在python中自动激活多处理管理器()字典

我正在使用自动激活将数据存储在多处理设置中。但是,我不知道如何将它合并到多处理管理器功能中。

我的自动激活代码来自Python 中的多级 'collection.defaultdict'并且在没有多处理发生时工作正常。

class vividict(dict):  
    def __getitem__(self, item):
        try:
            return dict.__getitem__(self, item)
        except KeyError:
            value = self[item] = type(self)()
            return value
Run Code Online (Sandbox Code Playgroud)

我的 multiproc 代码是相对简单的:

if __name__ == "__main__":
    man = Manager()
    ngramDict = man.dict()
    print(ngramDict) # {}
    s_queue = Queue()

    aProces = Process(target=insert_ngram, args=(s_queue,ngramDict,))
    aProces.start()
    aProces.join()
    print(ngramDict) # {}
    write_to_file()
Run Code Online (Sandbox Code Playgroud)

在 insert_ngram 中读取、写入和更新字典:

def insert_ngram(sanitize_queue, ngramDict):
    ngramDict = Vividict() # obviously this overwrites the manager
    try:
        for w in iter(s_queue.get, None):
        if ngramDict[w[0]][w[1]][w[2]][w[3]][w[4]]:
            ngramDict[w[0]][w[1]][w[2]][w[3]][w[4]]+=int(w[5])
        else:
            ngramDict[w[0]][w[1]][w[2]][w[3]][w[4]]=int(w[5])
    print(ngramDict) …
Run Code Online (Sandbox Code Playgroud)

python dictionary multiprocessing autovivification

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