Fra*_*fka 2 python dictionary data-structures
如果我运行以下代码:
import json
foo = [
{
"name": "Bob",
"occupation": "",
"standing": "good",
"locations": ["California"],
"meta": { "last_updated": "2018-01-15" }
},
{
"name": "",
"occupation": "Carpenter",
"standing": "bad",
"locations": ["Arizona"],
"meta": { "last_updated": "2018-01-15", "email": "bob@domain.com" }
},
]
output = {}
for i in foo:
output.update(i)
print json.dumps(output)
Run Code Online (Sandbox Code Playgroud)
最终输出是:
{
"locations": [
"Arizona"
],
"meta": {
"email": "bob@domain.com",
"last_updated": "2018-01-15"
},
"name": "",
"occupation": "Carpenter",
"standing": "bad"
}
Run Code Online (Sandbox Code Playgroud)
那很好。但是,我试图弄清楚如何将函数传递给更新方法,该方法基本上表示“仅在值已定义/不为空时更新”。因此,在第一次迭代中,名称是“Bob”,而在第二次迭代中,名称仍然是 Bob,因为名称本质上是未定义的。
最终输出如下所示:
{
"locations": [
"Arizona"
],
"meta": {
"email": "bob@domain.com",
"last_updated": "2018-01-15"
},
"name": "Bob",
"occupation": "Carpenter",
"standing": "bad"
}
Run Code Online (Sandbox Code Playgroud)
小智 6
您可以过滤要更新的新词典,例如:
b = {'bla': '', 'b': 77, 'c': '9'}
new_b = { k: v for k,v in b.items() if v }
Run Code Online (Sandbox Code Playgroud)
new_b将不再bla作为一个元素。
所以,就你而言:
for i in foo:
output.update({ k: v for k,v in i.items() if v })
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8536 次 |
| 最近记录: |