Как вы нацеливаетесь на определенный элемент внутри части значений пары ключ: значение? - PullRequest
0 голосов
/ 05 мая 2019

Я нацеливаюсь на определенный элемент в паре ключ: значение, как показано ниже, и я в тупике. Я хочу суммировать и вернуть значения всех элементов с ключами в качестве «элементов».

[{  '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}]

Ответы [ 2 ]

1 голос
/ 05 мая 2019

Итак, вы сначала

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 = 0
for dct in obj:
    if 'items' in dct:
        result += dct['quantity']

, которое можно сократить до

result = sum(dct['quantity'] for dct in obj if 'items' in dct)
0 голосов
/ 05 мая 2019

Вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...