支持deepcopy的defaultdict
defaultdict-NickNackGus的Python项目详细描述
默认dict
这是一个用于deep复制其默认值的defaultdict的包。
这可以用来实现一个简单的计数器对象,类似于它所基于的示例代码。
counter=DefaultDict()foritemin['spam','egg','spam','spam','bacon','spam']:counter[item]+=1print("Menu contents:")foritemincounter:print(" {}x {}".format(counter[item],item))
输出:
Menu contents:
1x bacon
1x egg
4x spam
与collections.defaultdict不同,默认值是对象,而不是工厂。这样可以更容易地创建嵌套数据结构。例如,以下内容是有效的并受到鼓励:
# shapes_by_color[color][shape] = countshapes_by_color=DefaultDict(default=DefaultDict({'total':0},default=0))withopen('test/shapes.log','r')asfp:forlineinfp:color,shape=line.split()shapes_by_color[color][shape]+=1shapes_by_color[color]['total']+=1forcolor,shapesinshapes_by_color.items():print("{}:".format(color))forshape,countinshapes.items():ifshape=='total':continueprint(" {}x {}".format(count,shape))print(" Total: {}".format(count))
输出:
green:
2x triangle
1x circle
Total: 3
red:
1x octagon
2x rhombus
Total: 3
blue:
1x triangle
1x square
Total: 2
请注意,默认值是一个引用,并且受外部更改的影响。这只影响默认值的新用法,而不影响以前的用法。
spam=DefaultDict(default=['Hello'])print(spam['eggs'])spam.default.append('world')print(spam['sausage'])print(spam)
输出:
['Hello']
['Hello', 'world']
DictWithDefault(init={'sausage': ['Hello', 'world'], 'eggs': ['Hello']}, default=['Hello', 'world'])