python - 将字典划分为较小字典的列表
问题描述
我从一个表中提取了数据,但它不是用 TR/TD 标签制作的常规表,而是用 DIV 和 SPAN 制作的。我有我的数据在一个字典
{'ab1911': '2', 'ab1912': '1', 'ab1938': '1', 'ab1939': '0','ab1965': '18', 'ab1966': '12', 'ab1993': '18', 'ab1994': '10','ab2021': '5', 'ab2022': '21', 'ab2049': '4', 'ab2050': '4'}.
这里字典的键是元素的唯一 ID,本质上是动态的。每次重新加载 ID 都会更改。
web表中的实际数据是这样的
Revision | Iteraion
2 1
1 0
18 12
18 10
5 21
4 4
我必须选择具有最大修订的行,如果修订相同,则选择具有最大迭代的行。这里正确的答案是Revision 18和Iteration 12
我在想的是如果我可以将字典转换成这样的较小字典列表
[{'ab1911': '2', 'ab1912': '1'},{'ab1938': '1', 'ab1939': '0'},{'ab1965': '8', 'ab1966': '18'},{'ab1993': '18', 'ab1994': '10'},{'ab2021': '5', 'ab2022': '21'},{'ab2049': '4', 'ab2050': '4'}]
然后比较列表中每个元素的第一个键值,找到最大值。获取值后,使用键(选择器的 ID)我可以从表中选择最大值。那么如何将字典转换为较小的字典列表
解决方案
来自官方文档的解决方案
如果你参考官方文档上的Itertools 食谱,有一个n
. 我们可以成对地迭代您的原始密钥dict
并创建您需要list
的密钥。dict
Itertools 食谱中的原始石斑鱼方法
def grouper(iterable, n, fillvalue=None):
"Collect data into fixed-length chunks or blocks"
# grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return zip_longest(*args, fillvalue=fillvalue)
修改为成对方法
def pairwise(iterable, fillvalue=None):
args = [iter(iterable)] * 2
return zip_longest(*args, fillvalue=fillvalue)
迭代对并创建字典列表
output = []
for key_one, key_two in pairwise(source_dict.keys()):
output.append({key_one: source_dict[key_one], key_two: source_dict[key_two]})
边注
正如评论所建议的那样,如果可能的话,您可能需要重新考虑如何读取数据。
推荐阅读
- css - 如何使用 bulma 创建两行
- java - System.out 到字符串
- r - 循环多个 which 语句
- r - 在 R 中运行因子分析之前删除数据集中的异常值
- java - 自第二个方法调用以来,对象为空
- ios - 根据与用户的距离在 SCNScene 上显示对象
- javascript - xmlHttpRequest.responseText 问题(未定义)
- python - 使用 Tensorflow-2.0 tf.optimizers 时如何修复“给定对象不是优化器实例”?
- javascript - 用 lodash 对对象数组进行排序:不工作
- php - Laravel:如何防止像 created_at user_id_created 这样的值发送到前端