Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将一本词典分成一系列较小的词典_Python_List_Dictionary - Fatal编程技术网

Python 将一本词典分成一系列较小的词典

Python 将一本词典分成一系列较小的词典,python,list,dictionary,Python,List,Dictionary,我已经从一个表中提取了数据,但它不是一个由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'}

我已经从一个表中提取了数据,但它不是一个由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
[{'ab1911': '2', 'ab1912': '1'},{'ab1938': '1', 'ab1939': '0'},{'ab1965': '8', 'ab1966': '18'},{'ab1993': '18', 'ab1994': '10'},{'ab2021': '5', 'ab2022': '21'},{'ab2049': '4', 'ab2050': '4'}]
我要做的是选择具有最大修订的行,如果修订相同,则选择具有最大迭代的行。这里正确的答案是第18版和第12次迭代

我想的是,如果我能把这本字典转换成这样一个小字典列表

Revision | Iteraion
   2          1
   1          0
   18         12
   18         10
   5          21
   4          4
[{'ab1911': '2', 'ab1912': '1'},{'ab1938': '1', 'ab1939': '0'},{'ab1965': '8', 'ab1966': '18'},{'ab1993': '18', 'ab1994': '10'},{'ab2021': '5', 'ab2022': '21'},{'ab2049': '4', 'ab2050': '4'}]
然后比较列表中每个元素的第一个键值并找到最大值。 获取值后,使用选择器的keyits ID,我可以从表中选择最大值。 那么,如何从官方文档中将词典转换为较小的词典列表

解决方案呢 如果您参考官方文档中的,那么有一个n块迭代的示例。我们可以在成对的基础上迭代原始dict的键,并创建您需要的dict列表

Itertools配方中的原始石斑法 def GROUPERTIABLE,n,fillvalue=无: 将数据收集到固定长度的块或块中 石斑鱼'ABCDEFG',3,'x'->ABC DEF Gxx args=[iteriterable]*n 返回zip_longest*参数,fillvalue=fillvalue 对成对方法的修改 def成对可编辑,fillvalue=None: args=[iteriterable]*2 返回zip_longest*参数,fillvalue=fillvalue 迭代对并创建dict列表 输出=[] 对于成对isesource_dict.keys中的键1和键2: output.append{key_one:source_dict[key_one],key_two:source_dict[key_two]} 旁注
正如评论所建议的,如果可能的话,您可能需要重新考虑如何读取数据。

假设您希望完全按照描述完成任务,而不考虑清洁度或可移植性,以下代码将生成您想要查看的阵列:

dict = {'ab1911': '2', 'ab1912': '1', 'ab1938': '1', 'ab1939': '0','ab1965': '18', 'ab1966': '12', 'ab1993': '18', 'ab1994': '10','ab2021': '5', 'ab2022': '21', 'ab2049': '4', 'ab2050': '4'}
arr = []
subdict = {}

itr = 0
for key,val in dict.items():
    subdict.update({key : val})
    itr = itr+1
    if(itr == 2):
        itr = 0
        arr.append(subdict)
        subdict = {}

print(arr)

通过更改解析表的方式,这可能更容易解决。另外,如果字典中有三个连续的ID,你会怎么做?你使用的是什么版本的Python?dict密钥是否保证可以订购?@Graipher我有一个父div标记,所有数据都在该标记下输入。我使用find_Elements_by_xpath获取ID为的子标记中的所有数据。由于ID是动态的但唯一的,因此使用for循环,我将数据存储在一个字典中,ID为键及其值。所以键ab1911和ab1912是对应的值。我正在使用if条件删除不需要的值。请不要将其放在注释中,您的问题将包含任何其他信息。与ASCII表不同,HTML代码的简短摘录可能会使此方法更简单。@Devbrath\R您使用的是CPython还是PyPy之类的其他实现?如果您不确定,您可能正在使用CPython。您可能还想提到,这依赖于字典已经按正确的顺序排列,并且完全按顺序排列,即Python 3.7+或CPython 3.6+。这就是我要找的,谢谢,伙计。