Как получить все значения из списка dict, который соответствует ключевому префиксу? - PullRequest
0 голосов
/ 22 февраля 2020

У меня есть список словарей, например:

[
 {
  'id': '11110110011',
  'a_dept_performance': 3,
  'a_group_performance': 2,
  'a_user_performance': 3,
  'f_service': 4,
  'f_facility_service': 2,
  'k_helpful': 2
  ...
 },
 {
  'id': '11110110012',
  'a_dept_performance': 3,
  'a_group_performance': 3,
  'a_user_performance': 3,
  'f_service': 2,
  'f_facility_service': 3,
  'k_helpful': 2
  ...
 },
 ...
]

Я хочу получить все значения, соответствующие префиксу c, например:

a_ = [3, 2, 3, 3, 3, 3, ...]
f_ = [4, 2, 2, 3, ...]
k_ = [2, 2, ...]

Любой способ реализовать это? Мои данные большие, поэтому мне интересно, есть ли более быстрый способ сделать это.

Ответы [ 2 ]

1 голос
/ 22 февраля 2020

вы можете использовать collections.defaultdict для хранения ваших значений:

from collections import defaultdict

my_prefixes = {'a_', 'f_', 'k_'}
result = defaultdict(list)
for d in my_list:
    for k, v in d.items():
        if k[:2] in my_prefixes:
            result[k[:2]].append(v)
print(result)

вывод:

defaultdict(<class 'list'>, {'a_': [3, 2, 3, 3, 3, 3], 'f_': [4, 2, 2, 3], 'k_': [2, 2]})

, если вы знаете, что все ключи одинаковы для каждого словаря вы можете добавить плюс скорости, как упоминалось @golf_cy:

from collections import defaultdict
my_prefixes = {'a_' : ['a_dept_performance', 'a_group_performance'],
               'f_': ['f_service', 'f_facility_service'],
               'k_': ['k_helpful']}

result = defaultdict(list)
for d in my_list:
    for k, v in my_prefixes.items():
        result[k].extend([d[e] for e in v])
0 голосов
/ 22 февраля 2020

Я не могу сказать, есть ли более быстрый способ сделать это, но, возможно, вам следует подумать об изменении структуры данных, если ваши данные большие. Ваша настройка не выглядит особенно эффективным или интуитивно понятным способом хранения ваших данных.

Рассмотрите базу данных или, если вы хотите остаться в пределах Python, посмотрите на Pandas.

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