Python 如何将key:value对的values部分中的特定元素作为目标?
我的目标是键:值对中的一个特定元素,如下所示,我被难住了。我想求和并返回所有元素的值,其中键为“items”Python 如何将key:value对的values部分中的特定元素作为目标?,python,list,dictionary,Python,List,Dictionary,我的目标是键:值对中的一个特定元素,如下所示,我被难住了。我想求和并返回所有元素的值,其中键为“items” [{ 'actcost': 5.56, 'bnfcode': '0101010G0AAABAB', 'bnfname': 'Co-MagaldroxSusp 195mg/220mg/5ml S/F', 'items': 2, 'nic': 5.98, 'practice': 'N81013', 'quantity': 1000}, {
[{ 'actcost': 5.56,
'bnfcode': '0101010G0AAABAB',
'bnfname': 'Co-MagaldroxSusp 195mg/220mg/5ml S/F',
'items': 2,
'nic': 5.98,
'practice': 'N81013',
'quantity': 1000},
{ 'actcost': 2.78,
'bnfcode': '0101010G0AAABAB',
'bnfname': 'Co-MagaldroxSusp 195mg/220mg/5ml S/F',
'items': 1,
'nic': 2.99,
'practice': 'N81029',
'quantity': 500},
{ 'actcost': 5.56,
'bnfcode': '0101010G0AAABAB',
'bnfname': 'Co-MagaldroxSusp 195mg/220mg/5ml S/F',
'items': 2,
'nic': 5.98,
'practice': 'N81088',
'quantity': 1000}]
所以你先
obj = json.loads(txt)
然后是一个简单的循环
result = 0
for dct in obj:
result += dct.get('items', 0)
可以缩短为
result = sum(dct.get('items', 0) for dct in obj)
result = sum(dct['quantity'] for dct in obj if 'items' in dct)
如果你想对其他字段求和,那么
result = 0
for dct in obj:
if 'items' in dct:
result += dct['quantity']
可以缩短为
result = sum(dct.get('items', 0) for dct in obj)
result = sum(dct['quantity'] for dct in obj if 'items' in dct)
您可以使用ipython或idle运行代码段:
vagrant@vagrant:~$ ipython
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.4.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: d = [{'bnfcode': '0101010G0AAABAB', 'items': 2, 'practice': 'N81013', 'bnfname': 'Co-MagaldroxSusp 195mg/220mg/5m
...: l S/F', 'nic': 5.98, 'actcost': 5.56, 'quantity': 1000}, {'bnfcode': '0101010G0AAABAB', 'items': 1, 'practice': '
...: N81029', 'bnfname': 'Co-MagaldroxSusp 195mg/220mg/5ml S/F', 'nic': 2.99, 'actcost': 2.78, 'quantity': 500}, {'bnf
...: code': '0101010G0AAABAB', 'items': 2, 'practice': 'N81088', 'bnfname': 'Co-MagaldroxSusp 195mg/220mg/5ml S/F', 'n
...: ic': 5.98, 'actcost': 5.56, 'quantity': 1000}]
In [2]: sum([i.get('items', 0) for i in d])
Out[2]: 5