繁体   English   中英

如何从匹配键前缀的字典列表中获取所有值?

[英]How to get all values from a list of dict that matches key prefix?

我有一个字典列表,例如:

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

我想检索与特定前缀匹配的所有值,例如:

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

有什么方法可以实现吗? 我的数据很大,所以我想知道是否有更快的方法。

您可以使用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])

我不能说是否有更快的方法来做到这一点,但如果您的数据很大,也许您应该考虑更改数据结构。 您的设置似乎不是一种特别有效或直观的数据存储方法。

考虑一个数据库,或者如果你想留在 Python 中,看看 Pandas。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM