0
私は入力の内容は何ですか?いくつかのフィールドは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-ストリッパー_strip
を使用して変換するフィールドが含まれています。
fields = ["x", "CONTENT"]
、この場合CONTENT
とx
に、これらのフィールドの値をマッピングするための最良の方法は何ですかそれぞれ_strip(x)
に_strip(CONTENT)
になります。
私の現在のコードは次のように見ているが、リストとdictsを参照することによって、これがこれを行うにはニシキヘビの方法ではないことを渡されるので、私はいくつかの疑問を持っています。
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
-functionを要求しませんが、適切な方法のためにマッピングするためにこの。
[{k:(_strip(v) if k in fields else v) for k,v in element.items()} for element in content]
注これはどちらかそれをワンライナーだが、あなたが合うようにあなたがそれを分割することができますようにPython的ではないこと:ここでは
? – Sebastian
私はそれが一般的に間違っているとは思わないが、私の推測では、参照渡しの場合、入力が変更されるということです。私が間違っているなら、私を訂正してください。マップ関数は関数型プログラミングからのものだと私は考えています。 – ScientiaEtVeritas
変更可能なオブジェクトを関数に渡すことはまったく問題ありません。そうすることができなくても、Pythonで多用することは非常に難しいでしょう。しかし、私はあなたが好きでないと思うのは、あなたがオブジェクトを編集して、変更されたオブジェクトを返すということです。これを修正する方法は、変更された要素 'mod_element = element.copy()'を作成し、そこで値を編集することです。別の答えも入力します。 – Sebastian