我有一个字典列表:
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'}]
但是在实际规模上是非常慢的。列表理解也很慢。我可以对现有代码进行任何改进,或者有更好的方法来处理这个问题吗?
此外,我尝试将列表转换为数据框。也很费时间。
你可以很容易地用 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'}]
您的数据规模有多大?任何方法在小样本下都会很快。