【发布时间】:2021-08-15 08:38:13
【问题描述】:
我有一个大的 JSON 对象。一部分是:
data = [
{
'make': 'dacia',
'model': 'x',
'version': 'A',
'typ': 'sedan',
'infos': [
{'id': 1, 'name': 'steering wheel problems'},
{'id': 32, 'name': ABS errors}
]
},
{
'make': 'nissan',
'model': 'z',
'version': 'B',
'typ': 'coupe',
'infos': [
{'id': 3,'name': throttle problems'},
{'id': 56, 'name': 'broken handbreak'},
{'id': 11, ;'name': missing seatbelts'}
]
}
]
我创建了一个列表,列出了我的 JSON 中可能出现的所有可能的信息组合(一辆车有时可能只有一个信息,而另一辆车可能有很多):
inf = list(set(i.get'name' for d in data for i in (d['infos'] if isinstance(d['infos'], list) else [d['infos']]))
inf_comb = [combo for n in range(1, len(infos+1)) for combo in itertools.combinations(infos, n)]
infos_combo = [list(elem) for elem in inf_comb]
现在我需要遍历整个 JSON data 并计算某些 infos_combo 集合出现的次数,因此我创建了代码:
tab = []
s = 0
for x in infos_combo:
s = sum([1 for k in data if (([i['name'] for i in (k['infos'] if isinstance(k['infos'], list) else [k['infos']])] == x))])
if s!= 0:
tab.append({'infos': r, 'sum': s})
print(tab)
我面临的问题是tab 仅返回我期望的一些元素 - 我的 JSON 对象中出现了更多组合并且必须计算但我无法得到它们。怎么解决?
【问题讨论】:
-
您需要提供minimal reproducible example (MRE} 并描述您获得的结果以及您期望或想要的结果。
标签: python json combinations itertools