根据关键字列表拆分词典

2024-10-01 09:26:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有脑电图,陀螺仪和其他数据的数据字典。为了进行处理,我想分别从dicts中提取eeg和陀螺仪数据。因此我有两个清单,上面有脑电图和陀螺仪的键。我用了两个dict理解来实现它,但是也许有一个更平滑的解决方案。在

eegKeys = ["FP3", "FP4"]
gyroKeys = ["X", "Y"]

# 'Foo' is ignored
data = {"FP3": 1, "FP4": 2, "X": 3, "Y": 4, "Foo": 5}

eegData = {x: data[x] for x in data if x in eegKeys}
gyroData = {x: data[x] for x in data if x in gyroKeys}

print(eegData, gyroData) # ({'FP4': 2, 'FP3': 1}, {'Y': 4, 'X': 3}) 

Tags: 数据infordataif字典foo陀螺仪
2条回答

不,两次听写就差不多了。您可以使用dictionary views选择存在的键,可能是:

eegData = {key: data[key] for key in data.keys() & eegKeys}
gyroData = {key: data[key] for key in data.keys() & gyroKeys}

如果仍在使用python2,请使用data.viewkeys()。在

字典视图提供了一个类集合的对象,然后可以在该对象上使用集合运算;&为您提供交集。在

请注意,使用key in eegKeyskey in gyroKeys的方法可以通过反转循环来加快速度(循环覆盖较小的列表,而不是较大的字典):

^{pr2}$

稍作修改,但这应该只是稍微干净一点:

eegKeys = ["FP3", "FP4"]
gyroKeys = ["X", "Y"]

# 'Foo' is ignored
data = {"FP3": 1, "FP4": 2, "X": 3, "Y": 4, "Foo": 5}

filterByKey = lambda keys: {x: data[x] for x in keys}
eegData = filterByKey(eegKeys)
gyroData = filterByKey(gyroKeys)

print(eegData, gyroData) # ({'FP4': 2, 'FP3': 1}, {'Y': 4, 'X': 3})

或者,如果你喜欢一条直线:

^{pr2}$

相关问题 更多 >