如何删除字典列表中的特定公共键?

问题描述 投票:0回答:1

我有一个字典列表:

res = [{'termA':'A1', 'termB':'B1', 'termC':'C1'},{'termA':'A2', 'termB':'B2', 'termC':'C2'},{'termA':'A3', 'termB':'B3', 'termC':'C3'}] 

每个字典都有相同的键,但相应键的值不同(就像矩阵一样)。我正在尝试找到从列表中的所有字典中删除(或提取)某些键(例如,

termA
termB
)的最快方法。

我的第一个想法是 for 循环。假设从

res
中仅保留
termC

new = [] 
for i in res: 
    new.append({'termC':i['termC']})

它按预期工作:

new = [{'termC':'C1'},{'termC':'C2'},{'termC':'C3'}]

但是在实际规模上是非常慢的。列表理解也很慢。我可以对现有代码进行任何改进,或者有更好的方法来处理这个问题吗?


此外,我尝试将列表转换为数据框。也很费时间。

python list dictionary nested
1个回答
0
投票

你可以很容易地用 pandas 做到这一点:

import pandas as pd

res = [
    {"termA": "A1", "termB": "B1", "termC": "C1"},
    {"termA": "A2", "termB": "B2", "termC": "C2"},
    {"termA": "A3", "termB": "B3", "termC": "C3"},
]

df = pd.DataFrame(res)

print(df["termC"].to_list())

输出:

['C1', 'C2', 'C3']

或者如果你不想使用 pandas:

new = [{k: v for k, v in x.items() if k == "termC"} for x in res]
print(new)

输出:

[{'termC': 'C1'}, {'termC': 'C2'}, {'termC': 'C3'}]

您的数据规模有多大?任何方法在小样本下都会很快。

© www.soinside.com 2019 - 2024. All rights reserved.