python - 如何根据条件删除python有序字典中的子键、值对?
问题描述
我有一个 python 字典,每个键内都有一个有序字典,有超过 1000 万个键、子键、值对。我想根据数字条件删除子键及其值,并且想知道如何以有效的方式做到这一点。
#My input dictionary
dict = {'Math': OrderedDict([('John', 0.0),
('Peter', 22.2222),
('Alex', 60.212),
('Ben', 82.19)]),
'Physics': OrderedDict([('John', 92.25),
('Peter', 35.22),
('Alex', 18.22),
('Ben', 76.19)]),
'Chemistry': OrderedDict([('John', 19),
('Peter', 24),
('Alex', 6),
('Ben', 100)])
}
#I want my output to delete subkey pairs where value is less than 20, for eg.
out_dict = {'Math': OrderedDict([('Peter', 22.2222),
('Alex', 60.212),
('Ben', 82.19)]),
'Physics': OrderedDict([('John', 92.25),
('Peter', 35.22),
('Ben', 76.19)]),
'Chemistry': OrderedDict([('Peter', 24),
('Ben', 100)])
}
我努力了:
for key in [key for key in dict if key>=20]:
del dict[key]
我收到了一个 TypeError。
解决方案
这是熊猫的解决方案,因为它在标签列表中:
import pandas as pd
from collections import OrderedDict
d = {'Math': OrderedDict([('John', 0.0), ('Peter', 22.2222), ('Alex', 60.212), ('Ben', 82.19)]),
'Physics': OrderedDict([('John', 92.25), ('Peter', 35.22), ('Alex', 18.22), ('Ben', 76.19)]),
'Chemistry': OrderedDict([('John', 19), ('Peter', 24), ('Alex', 6), ('Ben', 100)])
}
df2 = pd.DataFrame(d)
thedict = {}
for x,y in df2.unstack()[df2.unstack()>20].items():
thedict[x[0]] = []
for x,y in df2.unstack()[df2.unstack()>20].items():
thedict[x[0]].append((x[1],y))
for k,y in thedict.items():
thedict[k] = OrderedDict(y)
输出:
thedict
{'Math': OrderedDict([('Peter', 22.2222), ('Alex', 60.212), ('Ben', 82.19)]),
'Physics': OrderedDict([('John', 92.25), ('Peter', 35.22), ('Ben', 76.19)]),
'Chemistry': OrderedDict([('Peter', 24.0), ('Ben', 100.0)])}
推荐阅读
- time-series - 如何在数学上表示一个时间序列数据是另一个时间序列数据的先验指标?
- java - ArrayList 大小在 for 循环中重置为 1
- java - 如何以角度获取数据表的选定复选框行数据?
- python - 如何在我的数组中添加货币符号?
- python - 裁剪模板区域后,如何使用 matchTemplate 翻译 x、y 坐标?
- google-apps-script - 限制 Google App Script 的 OAuth 范围
- php - 注释:如何在 php 的 docblocks 中指定时间戳
- android - 使用移动热点或 USB 网络共享时如何在 android 中设置代理?
- c# - C#如何匹配两个列表框中的项目
- javascript - 使用类名将 HTML 表转换为 javascript 数组