支持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'])

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在嵌套的json字符串Java中附加双引号   java我应该首先将客户机的流读入字符串,然后解析HTTP,还是在从客户机的流中获取输入的同时解析HTTP?   java方法永远不会到达if语句,尽管它的条件得到了满足   java Spring Cloud Kinesis binder在启用kpl/kcl时创建SpringIntegrationMetadataStore和SpringIntegrationLockRegistry。有必要吗?   为什么打印空字符串时会弹出零?   java Swagger API规范自定义API响应属性usign@ApiPropertyModel   抽象类中受java保护的数据   java将参数作为参数从jsf页面传递给bean,并保存它   java在转换为字符串后丢失HTML转义   Java注释:使用注释更改数据   Java中XML XSD到AVRO avsc的映射   java将TreeView的子项、子项、子项着色   java如何在Springbeans中获取HttpServletRequest?   Java和MySQL如何在涉及外键时设计类