我有一本這樣的字典:
features_id = {
id1: [a, b, c, d],
id2: [c, d],
id3: [a, e, f, d, g, k],
...
}
我還有一個要創建新字典的值串列。像這樣的東西:
list_of_values = [a, c]
要達到的目標:
我想要一本這樣的新字典:
new_dict = {
id1: [a, c],
id2: [c],
id3: [a],
...
}
uj5u.com熱心網友回復:
對于如此大的資料集(1M),可能需要使用 pandas 和 numpy。我不確定這種情況下的速度,但您可以嘗試以下方法:
import pandas as pd
import numpy as np
features_id = {
'id1': ['a', 'b', 'c', 'd'],
'id2': ['c', 'd'],
'id3': ['a', 'e', 'f', 'd', 'g', 'k'],
'id4': ['e', 'f', 'd', 'g', 'k']}
list_of_values = ['a', 'c']
y = np.array(list_of_values)
def filt(x):
x = np.array(x)
return x[np.isin(x,y)].tolist()
pd.Series(features_id).map(filt).to_dict()
>>> out
'''
{'id1': ['a', 'c'], 'id2': ['c'], 'id3': ['a'], 'id4': []}
uj5u.com熱心網友回復:
我為將來遇到類似問題的用戶撰寫此答案。
正如上面的評論中所寫,該答案的解決方案是:
set_of_values = set(list_of_values)
new_dict = {k:[x for x in v if x in set_of_values] for k, v in features_id.items()}
使用集合而不是串列可以大大加快計算速度,尤其是在我必須比較 1M 字典鍵的情況下,需要幾秒鐘而不是幾分鐘。
uj5u.com熱心網友回復:
對于初始字典的每個專案,如果元素包含在專案中,您必須搜索特征串列的每個專案。如果是,則添加它。
在新字典中第一次添加鍵時,您必須創建值,而在其他情況下,您必須將其附加到現有字典中。
new_dict = {}
for key, value in features_id.items():
for val in list_of_values:
if val in value:
if key not in new_dict:
new_dict[key] = [val]
else:
new_dict[key].append(val)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/530880.html
上一篇:使用帶有10.000個字串串列的正則運算式編譯(Python)的有效方法
下一篇:加載網站時從URL中洗掉字串
