在列表中映射一些字典字段

时间:2017-11-03 17:35:25

标签: python list dictionary collections

我有一个dicts列表,输入是什么。有些字段是HTML编码的。

[
     {
       CONTENT:"<title>ABC</title>",
       bla: "Text",
       x: "<span>Test</span>"
     },
     { 
       CONTENT:"<b>def</b>",
       bla: "32",
       x:"<div><b>Test</b></div>"
     },
     ...
 ]

列表fields包含要使用HTML-Stripper _strip转换的字段:

fields = ["x", "CONTENT"]

将这些字段的值(在本例中为CONTENTx)映射到_strip(CONTENT)各自_strip(x)的最佳方式是什么。

我当前的代码看起来像这样,但我有一些疑问,因为列表和dicts是通过引用传递的,而且这不是pythonic的方法。

elements = map(lambda x: f(fields, x), elements)   

def f(fields, element):
    for field in fields:
        element[field] = _strip(element[field])
    return element

预期结果如下:

[
     {
       CONTENT:_strip("<title>ABC</title>"),
       bla: "Text",
       x: _strip("<span>Test</span>")
     },
     { 
       CONTENT:_strip("<b>def</b>"),
       bla: "32",
       x:_strip("<div><b>Test</b></div>")
     },
     ...
 ]

评估:

[
     {
       CONTENT:"ABC",
       bla: "Text",
       x: "Test"
     },
     { 
       CONTENT:"def",
       bla: "32",
       x:"Test"
     },
     ...
 ]

我不是要求_strip - 函数,而是要以正确的方式来映射它。

1 个答案:

答案 0 :(得分:0)

这是一种没有编辑element的方法,只使用了解理解:

[{k:(_strip(v) if k in fields else v) for k,v in element.items()} for element in content]

请注意,这不是Pythonic,因为它是一个单行,但您可以根据需要将其拆分。