如何使用python将词典拆分为特定数量的较小词典?

如何使用python将词典拆分为特定数量的较小词典?,python,dictionary,split,divide,chunking,Python,Dictionary,Split,Divide,Chunking,我正试着把一本大字典分成n个小字典。每个字典条目都包含一个网址,拆分字典的目的是让这些地址的网页垃圾可以分散到多台计算机上 词典的格式如下: { u'25637293': [u'Methyldopa',u'http://www.ncbi.nlm.nih.gov/pubmed/25637293', 43579], u'25672666': [u'Furosemide', u'http://www.ncbi.nlm.nih.gov/pubmed/25672666', 40

我正试着把一本大字典分成n个小字典。每个字典条目都包含一个网址,拆分字典的目的是让这些地址的网页垃圾可以分散到多台计算机上

词典的格式如下:

{
  u'25637293': 
    [u'Methyldopa',u'http://www.ncbi.nlm.nih.gov/pubmed/25637293', 43579], 
  u'25672666':
    [u'Furosemide', u'http://www.ncbi.nlm.nih.gov/pubmed/25672666', 40750]
}
有13000个键/值对

值中的最后一项是从0到13000的索引

这就是我尝试过的。(尽管我可能把事情复杂化了)

1) 创建13000个值的列表

2) 把这个除以n

3) 确保字典中的条目为1-13000

4) 遍历列表
如果(列表中的i==字典条目),则可以提取网址进行刮取
(代码中不包括最后一部分)

我原以为
len(smalldict)
应该是13000/4(因为
len(dictionary)
是13000,而
len(division[0])
在division中只有一个列表时),但它只返回几百个。它并没有像想象的那样分裂。
我已经做了很多天了。有人能帮忙吗?

简单。这样做。例如,我们有一个有五个键的字典,我们想把它分成两个大小相等的字典

>>> d = {'key1': 1, 'key2': 2, 'key3': 3, 'key4': 4, 'key5': 5}
>>> d1 = dict(d.items()[len(d)/2:])
>>> d2 = dict(d.items()[:len(d)/2])
>>> print d1
{'key1': 1, 'key5': 5, 'key4': 4}
>>> print d2
{'key3': 3, 'key2': 2}
这个要点对我很有用:

我用
itertools.cycle
重新编写了它

import itertools
def split_dict(x, chunks):      
    i = itertools.cycle(range(chunks))       
    split = [dict() for _ in range(chunks)]
    for k, v in x.items():
        split[next(i)][k] = v
    return split

听起来你需要一个分贝。我建议你读一下。虽然这不是您的唯一选择,但它与Python一起使用非常简单。我对上一节中的逻辑有点困惑。你只是想随意地把字典分成大小相等的块,还是对哪些条目进入哪些块有额外的限制?我试图把字典分成大致相等的块-对哪些条目进入哪些块没有限制。这里讨论:这对我不起作用,但我更喜欢这个想法,而不是选择的答案。我的修改版本:d1={k:d[k]表示列表中的k(d.keys())[:int(len(d)*0.5)]
import itertools
def split_dict(x, chunks):      
    i = itertools.cycle(range(chunks))       
    split = [dict() for _ in range(chunks)]
    for k, v in x.items():
        split[next(i)][k] = v
    return split