这可能不是典型的问题,但我真的没有任何我认识的人来检查这个问题。我正在对其他人的代码进行一些重构,只是想要第二个意见,因为我当然认为我的工作会让它变得更好,但是你在那里得到的一些验证会有所帮助。
从这样的数组开始:
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:strip-space elements="*"/>
<xsl:output indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="ComponentRef">
<xsl:variable name="pos" select="position()"/>
<ComponentRef SomeAttr="{/Wix/Fragment/DirectoryRef/Component[$pos]/@Name}"/>
</xsl:template>
</xsl:transform>
并尝试获得此类结果:
<xsl:template match="ComponentRef">
<xsl:variable name="pos"><xsl:number/></xsl:variable>
<ComponentRef SomeAttr="{/Wix/Fragment/DirectoryRef/Component[position() = $pos]/@Name}"/>
</xsl:template>
这是现有代码:
errorLog: [{
errorCode: 11,
errorDescription: "abc",
date: "2017-01-01",
severity: "H"
},{
errorCode: 11,
errorDescription: "abcd",
date: "2017-01-02",
severity: "H"
},{
errorCode: 99,
errorDescription: "abcd",
date: "2017-01-02",
severity: "H"
}]
和我的重构:
errorSummary: [{
errorCode: 11,
severity: "H",
count: 2
},{
errorCode: 99,
severity: "H",
count: 1
}]
你们都在想什么?一个有用的重构?还是浪费时间?
答案 0 :(得分:2)
你甚至可以走得更远:
def remove_entries(d, k):
if k in d:
del d[k]
for value in d.values():
if isinstance(value, dict):
remove_entries(value, k)
这使它快3倍(理论上)
如果您不想过滤严重性:
def remove_from_dict_in_list(l, k):
for i in l:
if isinstance(i, list):
remove_from_dict_in_list(i, k)
elif isinstance(i, dict):
remove_entries(i, k)
def remove_entries(d, k):
if k in d:
del d[k]
for value in d.values():
if isinstance(value, dict):
remove_entries(value, k)
elif isinstance(value, list):
remove_from_dict_in_list(value, k)