标签: defaultdict

合并嵌套的默认值

我有这个:

dict1 = defaultdict(lambda:defaultdict(list))
dict1['rl1']['sh1'] = ['a','b']
dict1['rl1']['sh2'] = ['c','d']
dict1['rl2']['sh1'] = ['c','d']

dict2 = defaultdict(lambda:defaultdict(list))
dict2['rl1']['sh1'] = ['p','q']
dict2['rl1']['sh3'] = ['r','s']
dict2['rl3']['sh1'] = ['r','s']
Run Code Online (Sandbox Code Playgroud)

我想做两个默认配置的联合,这将是结果:

uniondict = defaultdict(lambda:defaultdict(list))
uniondict['rl1']['sh1'] = ['a','b','p','q']
uniondict['rl1']['sh2'] = ['c','d']
uniondict['rl1']['sh3'] = ['r','s']
uniondict['rl2']['sh1'] = ['c','d']
uniondict['rl3']['sh1'] = ['r','s']
Run Code Online (Sandbox Code Playgroud)

我不确定如何获得这个结果..我已经尝试使用dict1.items()和dict2.items(),或更新功能,但我必须遗漏一些东西,因为我无法得到"联盟"默认情况.

python union data-structures defaultdict

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

collections.defaultdict()上的min()返回最大计数

min()在defaultdict对象上使用时,如果在计数字符串索引的字典上使用它,则奇怪地返回最大值.

例如:

>>> import collections
>>> defaultdict=collections.defaultdict
>>> x=defaultdict(int)
>>> string="lol I am a lol noob"
>>> for k in string:
    x[k]+=1


>>> x
defaultdict(<type 'int'>, {'a': 2, ' ': 5, 'b': 1, 'I': 1, 'm': 1, 'l': 4, 'o': 4, 'n': 1})
>>> min(x.items())
(' ', 5)
Run Code Online (Sandbox Code Playgroud)

python python-2.7 defaultdict

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

如何组合多个defaultdict(Counter)?

多个如何组合defaultdict(Counter)

鉴于我有两个defaultdict(Counter),我尝试了以下方法,它有效,但是还有其他方法可以实现组合吗?

>>> from collections import Counter, defaultdict
>>> x = {'a':Counter(['abc','def','abc']), 'b':Counter(['ghi', 'jkl'])}
>>> y = {'a':Counter(['abc','def','mno']), 'c':Counter(['lmn', 'jkl'])}
>>> z = x+y
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'dict' and 'dict'
>>> z = defaultdict(Counter)
>>> for i in x:
...     z[i].update(x[i])
... 
>>> for i in y:
...     z[i].update(y[i])
... 
>>> z
defaultdict(<class 'collections.Counter'>, {'a': Counter({'abc': 3, 'def': 2, 'mno': 1}), 'c': …
Run Code Online (Sandbox Code Playgroud)

python merge counter addition defaultdict

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

如何使用带有 lambda 表达式的 DefaultDict 来使默认值可变?

DefaultDicts 是有用的对象,它能够拥有一个字典,该字典可以使用用于定义默认值的可调用函数动态创建新键。例如。用于str使空字符串成为默认值。

>>> food = defaultdict(str)
>>> food['apple']
''
Run Code Online (Sandbox Code Playgroud)

您还可以使用 lambda 将表达式设为默认值。

>>> food = defaultdict(lambda: "No food")
>>> food['apple']
'No food'
Run Code Online (Sandbox Code Playgroud)

但是,您无法将任何参数传递给此 lambda 函数,这会在尝试调用该函数时导致错误,因为您实际上无法将参数传递给该函数。

>>> food = defaultdict(lambda x: "{} food".format(x))
>>> food['apple']

Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
    food['apple']
TypeError: <lambda>() takes exactly 1 argument (0 given)
Run Code Online (Sandbox Code Playgroud)

即使您尝试提供参数

>>> food['apple'](12)

Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
    food['apple']
TypeError: <lambda>() takes exactly 1 argument (0 given)
Run Code Online (Sandbox Code Playgroud)

这些 …

python lambda defaultdict

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

如何将 dict 转换为递归 defaultdict 并加载 JSON?

有什么方法可以使用 Python 2.7将 JSON 代码加载到递归中defaultdict以避免?KeyError

例如:

from __future__ import print_function
from collections import defaultdict
import json

S =  '{"a": [{"b": "TEST1", "p": "TEST2"}, {"b": "TEST3", "p": "TEST4"}]}'

d = json.loads(S)
nd = lambda: defaultdict(nd)
ni = nd()
print('1: ', ni['a'][0]['b'])
ni.update(d)
print('2: ', ni['a'][0]['b'])
print('3: ', ni['a'][1]['p'])
print('4: ', ni['a'][1]['c'])
Run Code Online (Sandbox Code Playgroud)

结果

from __future__ import print_function
from collections import defaultdict
import json

S =  '{"a": [{"b": "TEST1", "p": "TEST2"}, {"b": "TEST3", "p": "TEST4"}]}'

d = json.loads(S)
nd = …
Run Code Online (Sandbox Code Playgroud)

python recursion json python-2.7 defaultdict

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

初始化 python Defaultdict

有没有办法通过以下方式初始化字典:

component_map = {}
component_map[component] = {'in': [], 'out': [], 'degree': 0}
Run Code Online (Sandbox Code Playgroud)

例如,我可以创建一个默认情况下defaultdict会给我一个[]的,如下所示:

from collections import defaultdict
component_map = defaultdict(list)
component_map['component']
# []
Run Code Online (Sandbox Code Playgroud)

我将如何初始化它以便调用component_map['component']返回{'in': [], 'out': [], 'degree': 0}

python python-3.x defaultdict

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

有没有更好的方法来合并两个集合字典?

我正在使用此代码将一个字典合并到另一个字典中 - 如果存在键,它应该合并两个字典中的值:

source_dict = defaultdict(set)
target_dict = defaultdict(set)

def merge_dict(source_dict, target_dict):
    for source_key in source_dict:
        if source_key in target_dict:
            target_dict[source_key].update(source_dict[source_key])
        else:
            target_dict[source_key] = source_dict[source_key]
Run Code Online (Sandbox Code Playgroud)

有没有办法优化merge_dict上面的功能?例如,使其更简洁或更高效?

python dictionary defaultdict

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

为什么defaultdict为我的值创建一个数组?

我从一组数组创建一个默认的dict:

>>> array = [['Aaron','1','2'],['Ben','3','4']]
>>> d = defaultdict(list)
>>> for i in array: d[i[0]].append({"num1":i[1],"num2":i[2]})
Run Code Online (Sandbox Code Playgroud)

我的预期结果是:

>>> d
>>> defaultdict(<type 'list'>, {'Aaron': {'num1': '1', 'num2': '2'}, 
'Ben': {'num1': '3', 'num2': '4'}})
Run Code Online (Sandbox Code Playgroud)

但我的结果是:

>>> d
>>> defaultdict(<type 'list'>, {'Aaron': [{'num1': '1', 'num2': '2'}], 
'Ben': [{'num1': '3', 'num2': '4'}]})
Run Code Online (Sandbox Code Playgroud)

就像defaultdict试图将我的值保存在数组中一样,因为这是源列表!

任何人都知道这里发生了什么以及我如何得到预期的结果?

python collections list defaultdict

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

字典Python中重复键的值列表

如果这个问题已经在这里探讨过,请提前道歉 - 我在这里看了不同的答案,却找不到我需要的东西.

我的目标是创建一个这样的字典 - {'a':[10, 9, 10, 10], 'b':[10, 9, 1, 0], 'c':[0, 5, 0, 1], and so on}

我所拥有的是具有重复键的多个词典(每个其他词典中都有相同的键),就像这样 {'a':10, 'b': 0, 'c': 2} {'a':7, 'b': 4, 'c': 4} {'a':4, 'b': 5, 'c': 3}

我无法知道这些字典的数量,或者是否有密钥继续到'f',或者其中有'g',但我知道密钥是重复的.我试过defaultdict但我得到的是 -

defaultdict(<type 'list'>, {'a': [10]})
defaultdict(<type 'list'>, {'a': [10], 'b': [3]})
defaultdict(<type 'list'>, {'a': [10], 'b': [3], 'c': [0]})
Run Code Online (Sandbox Code Playgroud)

然后为下一个字典做同样的事情 -

defaultdict(<type 'list'>, {'a': [4]})
defaultdict(<type 'list'>, {'a': [4], 'b': [5]})
defaultdict(<type 'list'>, {'a': [4], 'b': [5], 'c': [1]})
Run Code Online (Sandbox Code Playgroud)

我对上面输出的代码是 …

python dictionary key duplicates defaultdict

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

嵌套字典,默认值

有没有办法制作一个嵌套字典,我可以说mydict[x][y][z] += 1,mydict[x][y][z]以前没有的地方,默认为0(增量后会是1)?

我看着回答类似的问题中,你可以说mydict[x][y][z] = 1defaultdictcollections类(声明Python中的多维字典),但是,这并不让你采用默认值,然后递增.

python counter dictionary defaultdict

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