Python 字典json pytjon中列表项的总和
我有一个json,如下所示:Python 字典json pytjon中列表项的总和,python,json,dictionary,Python,Json,Dictionary,我有一个json,如下所示: { "fields": { "List1": [ "List2": [ { "List3": [ { "item": "1", "sale": 1149.99
{
"fields": {
"List1": [
"List2": [
{
"List3": [
{
"item": "1",
"sale": 1149.99
},
{
"item": "2",
"sale": 20
}]}]]}}
我使用此递归方法返回列表的总和:
def sale_sum(json):
sale_list=[]
if isinstance(json, dict):
for k, v in json.items():
if k == 'sale':
sale_list.append(v)
elif isinstance(v, list):
for e in v:
sale_sum(e)
elif isinstance(v, dict):
sale_sum(v)
for i in range(0, len(sale_list)):
sale_list[i] = int(sale_list[i])
return sum(sale_list)
但我一直从结果中得到0。代码怎么了?还有更好的方法吗
更新:
对此进行了更改,但仍获得0。我需要函数中的sale_列表,所以我制作了一个嵌套函数
def sale_sum(json):
sale_list=[]
def list_count(json):
if isinstance(json, dict):
for k, v in json.items():
if k == 'sale':
sale_list.append(v)
elif isinstance(v, list):
for e in v:
list_count(e)
elif isinstance(v, dict):
list_count(v)
for i in range(0, len(sale_list)):
sale_list[i] = int(sale_list[i])
return sum(sale_list)
可能就是你要找的
更新:
下面是一个代码示例
def find(key, dictionary, sale_list):
for k, v in dictionary.items():
if k == key:
yield dictionary
sale_list.append(v)
elif isinstance(v, dict):
for result in find(key, v, sale_list):
yield result
elif isinstance(v, list):
for d in v:
if isinstance(d, dict):
for result in find(key, d, sale_list):
yield result
sale_list = []
list(find("sale", data, sale_list))
print(sum(sale_list))
您递归调用了
sale\u sum()
,但忽略了返回的值。您应该将sale\u list=[]
移到函数sale\u sum
之外。每次调用所有函数sale\u sum
,它都会初始化为空。json也是无效的。您可以使用联机json解析器进行检查。@Martin我将sale_list=[]放在函数之外,但仍然得到0您从未在新代码中调用list_count
。在范围(0,len(sale_list))中的i的前面调用list_count(json)
:
myjson = {
"fields": {
"List1": [
{ "List2": [
{
"List3": [
{
"item": "1",
"sale": 1149.99
},
{
"item": "2",
"sale": 20
}
]
}
]}
]
}
}
def sale_sum(json):
sale_list=[]
def list_count(json):
if isinstance(json, dict):
for k, v in json.items():
if k == 'sale':
sale_list.append(v)
elif isinstance(v, list):
for e in v:
list_count(e)
elif isinstance(v, dict):
list_count(v)
list_count(json)
for i in range(0, len(sale_list)):
sale_list2[i] = int(sale_list[i])
return sum(sale_list)
print(sale_sum(myjson))