【发布时间】:2017-12-14 15:52:04
【问题描述】:
我有一个嵌套字典,结构如下:
{
status: {3 items},
entity_list: [],
concept_list: [
{6 items},
{7 items},
{7 items},
{7 items},
{6 items},
{6 items},
{7 items},
{7 items},
{6 items}
],
time_expression_list: [],
money_expression_list: [],
quantity_expression_list: [1 item],
other_expression_list: [],
quotation_list: [],
relation_list: [10 items]
}
让我们关注concept_list(请注意,我省略了无关信息只是为了可视化):
concept_list: [
{
form: "length",
id: "566859a9e3",
sementity: {
class: "class",
fiction: "nonfiction",
id: "A",
type: "None"
},
semld_list: [1 item],
variant_list: [2 items],
relevance: "100"
},
{
form: "length",
id: "f06dc65ae1",
sementity: {
class: "class",
fiction: "nonfiction",
id: "B",
type: "None"
},
semld_list: [1 item],
semtheme_list: [
{
id: "C",
type: "None"
}
],
variant_list: [2 items],
relevance: "100"
},
{7 items},
{7 items},
{6 items},
{6 items},
{7 items},
{7 items},
{6 items},
{6 items},
{7 items},
{7 items},
{6 items},
{6 items},
{6 items}
]
一般来说,如何从content_list 键中提取到新字典sementity 和semtheme_list 的ids 值(如果存在)?例如,新字典应该有这样的结构(*):
new_dict = {
{ 'form: 'length',
'sementity':'A',
'semtheme_list':'NaN'
}
,
{ 'form: 'length',
'sementity':'B',
'semtheme_list':'C'
}
,
...
}
另外,如果该元素不存在,我想添加一个NaN 值。到目前为止,我尝试使用mdict:
from mdict import MDict
for item in a_dict:
a = MDict(item)
print(a.get('concept_list:id'))
还有
for t in a_dict:
#print(t)
if 'concept_list' in t:
myvalues = [i['concept_list'] for i in t if 'concept_list' in i]
print(myvalues)
但是我没有得到像(*) 这样的字典中的值。
【问题讨论】:
-
您的数据是 JSON 格式的字符串,不是有效的 Python dict/list 结构。
-
一个字典有键值对。您正在构建它更像是一个集合。您希望最终结果如何?
-
点赞
(*)(即{ 'sementity':'A', 'semtheme_list':'NaN' } , { 'sementity':'B', 'semtheme_list':'C' } , ... }) -
我不知道这意味着什么。如果你正在寻找一个复杂的列表理解,你可以这样做:
[{'sementity': item.get('sementity', {}).get('id'), 'semtheme_list': next(iter(item.get('semtheme_list', [])), {}).get('id')} for item in original['concept_list']]
标签: python dictionary recursion data-structures list-comprehension