Python 如何以特定的比率将大字典的对象分配给小字典?

Python 如何以特定的比率将大字典的对象分配给小字典?,python,python-2.7,dictionary,Python,Python 2.7,Dictionary,我有一本字典,看起来像这样: {"1":{"Key1":"Value1", "Key2":"Value2", "Key3":"Value3"}, "2":{"Key1":"Value1", "Key2":"Value2", "Key3":"Value3"}, "3":{"Key1":"Value1", "Key2":"Value2", "Key3":"Value3"}, "4":{"Key1":"Value1", "Key2":"Value2", "Key3":"Value3"}}

我有一本字典,看起来像这样:

{"1":{"Key1":"Value1", "Key2":"Value2", "Key3":"Value3"}, 
 "2":{"Key1":"Value1", "Key2":"Value2", "Key3":"Value3"}, 
 "3":{"Key1":"Value1", "Key2":"Value2", "Key3":"Value3"}, 
 "4":{"Key1":"Value1", "Key2":"Value2", "Key3":"Value3"}} 
 ... 
 ... 
 "100":{"Key1":"Value1", "Key2":"Value2", "Key3":"Value3"} 
我需要三个dict
d1
d2
d3
,其中
d1
包含前20个键的值,
d2
包含后30个键的值,
d3
包含后50个键的值。
有人能帮我吗?

您可以使用
dict.items()
将键值组合提取到列表中,然后将这些组合分割成子列表

您可能希望首先对该列表应用一些排序;词典没有顺序,所以前20个词的定义取决于你自己应用的顺序:

items = sorted(inputdict.items(), key=lambda i: int(i[0]))

d1 = dict(items[:20])
d2 = dict(items[20:50])
d3 = dict(items[50:])

这将首先对键进行数字排序。

您可以创建一个通用函数,将字典拆分为给定大小的字典列表

def split_iterator(iterator, sizes):
    return ((iterator.next() for _ in xrange(size)) for size in sizes)

def split_dictionary(dic, sizes):
    return [{val[0] : val[1] for val in it} for it in split_iterator(dic.iteritems(), sizes)]
然后你可以使用
split\u dictionary(你的dict,(20,30,50))
来拆分你的字典。即使尺寸不正确,这也是安全的


由于字典没有特定的顺序,您可以在字典上用另一个迭代器替换
dic.iteritems()
,该迭代器将在需要时引入一些顺序。

帮助您做什么?你的代码在哪里?它到底有什么问题?字典本身没有顺序,那么你如何定义“前20个”呢?下面是我尝试过的代码。从运算符导入itemgetter keys=json.keys()顺序=列表(键)q1=int(round(len(键)*0.2))q2=int(round(len(键)*0.3))q3=int(round(len(键)*0.5))b=[q1,q2,q3]n=0表示i在b中:队列=顺序[n:n+i]n=n+i打印范围内j的队列(len(队列)):q=(队列[j],json.get(队列)[j] )打印q通过这个我可以得到我想要的3个较小的dict,但是你能帮我把它们分配到3个变量吗?dict不需要排序,但是如果排序的话会更好。[(queues[j],json.get(queues[j])for j in range(len(queues))]给我一个列表,所以我尝试使用dict()将其转换为dict然后尝试使用d[0]将值分配给变量。但我得到一个错误,即“type”对象没有属性“getitem”@Anurag:您的代码不是真正可读的或解释性的(例如什么是
json.keys()
?),最好用简单的英语解释一下您拥有什么和想要什么。您可以直接使用
{key:value for element in iterator}
定义dict,或者创建一个dict并填充它(例如使用
dict[key]=value
),或者对只包含两个元素的对象使用
dict
函数(每对的第一个元素是键,另一个元素是值)-例如,你的列表,只要确保
d=dict([(x,y)表示i in t])
。仍然
d={x:y表示i in t}
更好。