Найти медиану значений словаря в списке списков - PullRequest
0 голосов
/ 07 октября 2019

У меня проблемы с этим. У меня есть следующий список:

listA = [
    [
        {u'source': u'manual', u'value': 10},
        {u'source': u'manual', u'value': 10},
        {u'source': u'manual', u'value': 20},
        {u'source': u'manual', u'value': 30},
        {u'source': u'manual', u'value': 10},
        {u'source': u'manual', u'value': 10},
        {u'source': u'manual', u'value': 10},
        {u'source': u'manual', u'value': 30}
    ],
    [
        {u'source': u'manual', u'value': 20},
        {u'source': u'manual', u'value': 50},
        {u'source': u'manual', u'value': 80},
        {u'source': u'manual', u'value': 60},
        {u'source': u'manual', u'value': 10},
        {u'source': u'manual', u'value': 10},
        {u'source': u'manual', u'value': 40},
        {u'source': u'manual', u'value': 30}
    ],
    [
        {u'source': u'manual', u'value': 60},
        {u'source': u'manual', u'value': 20},
        {u'source': u'manual', u'value': 40},
        {u'source': u'manual', u'value': 30},
        {u'source': u'manual', u'value': 20},
        {u'source': u'manual', u'value': 10},
        {u'source': u'manual', u'value': 50},
        {u'source': u'manual', u'value': 10}
    ]
]

Что я хочу сделать, это зациклить вложенный список, извлечь значение словаря (первая позиция первого вложенного списка, первая позиция второго вложенного списка, первая позиция третьегоВложенный список -> вторая позиция первого вложенного списка, вторая позиция второго вложенного списка, вторая позиция третьего вложенного списка и т. д.), а затем найдите медианное значение значений позиции «x».

Спасибо!

Ответы [ 2 ]

2 голосов
/ 07 октября 2019

Вы можете использовать понимание списка с zip:

from statistics import median

[median(i['value'] for i in l) for l in zip(*listA)]
# [20, 20, 40, 30, 10, 10, 40, 30]
1 голос
/ 07 октября 2019

Если вы хотите numpy, вы можете использовать numpy.median :

import numpy as np

result = np.median([[i['value'] for i in l] for l in zip(*listA)], axis=1)
print(result)

Выход

[20. 20. 40. 30. 10. 10. 40. 30.]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...