2015-11-06 70 views
0

我是python和这里的新手。我需要根据原始字典中的N个键创建N个新词典。 可以说我有一个OriginalDict {a:1, b:2, c:3, d:4, e:5, f:6}我需要创建6个新的词典,其中键(新键相同)的原始值。类似的东西:根据原始词典中的N个键创建N个新词典

Dict1 {Name:a,...}, Dict2 {Name:b,...}, Dict3 {Name:c,...}..... 
Dict6 {Name:f...} 

这是我的代码:

d = {}  
for key in OriginalDict: 
    d['Name'] = key 

我有一个新的字典,而是只为最后的关键。

print d 

{Name:f} 

我想COS'在字典中的最后的值将覆盖前一个如果密钥是相同的

请指教... :)

+0

语句具有与键(新密钥是相同的)的original'的价值矛盾的例子,其中所有的按键都是'Name' – Pynchia

+0

请澄清在OriginalDict输出 – Pynchia

回答

1

如果,例如,我们把所有这些在列表类型的字典,我们可以用这个内涵

dicts = [{'Name': k} for k in OriginalDict] 

让我们尝试一下

>>> OriginalDict = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6} 
>>> dicts = [{'Name': k} for k in OriginalDict] 
>>> dicts 
[{'Name': 'd'}, {'Name': 'c'}, {'Name': 'a'}, {'Name': 'b'}, {'Name': 'e'}, {'Name': 'f'}] 

声明6 new dictionaries having as keys (new keys are same) the value of the original似乎与您的例子相矛盾,至少对我而言。

在这种情况下,我们可以做

dicts = [{v: k} for k, v in OriginalDict.items()] 

让我们尝试一下:

>>> dicts = [{v: k} for k, v in OriginalDict.items()] 
>>> dicts 
[{4: 'd'}, {3: 'c'}, {1: 'a'}, {2: 'b'}, {5: 'e'}, {6: 'f'}] 
+0

'6个新的字典,他们是钥匙加我猜你还是需要循环 – ganesa75

+0

辉煌的作品! – ganesa75

+0

我很抱歉,我以为我已经理解了这个问题,然后我又读了一遍,并且感到困惑。看我最后的编辑。 – Pynchia

0

在Python 3.x都有:

for key in OriginalDict.keys(): 
    d = {} 
    d ['Name'] = key 

这会给你一个新的字典原始的每一个关键。现在,你可以将它们保存在列表内或其他字典内等:

New_Dicts = [] 
for key in OriginalDict.keys(): 
    d = {} 
    d ['Name'] = key 
    New_Dicts.append(d) 

或者,

New_Dicts = {} 
for i,key in enumerate(OriginalDict.keys()): 
    d = {} 
    d ['Name'] = key 
    New_Dicts[i] = d 
+0

我在Python 2.7中。第二个工程虽然。谢谢。 – ganesa75

+0

我有另一个请求链接到这一个: 我现在需要在6个新词典中的每一个基于 的原始值中的6个键的值添加另一个键: 目标输出: – ganesa75

+0

我可以修改新的词典? 目标输出: [{'Name':'d',类型:int},{'Name':'c',类型:int},{'Name':'a',类型:int},{名称':'b',类型:int},{'名称':'e',类型:int},{'名称':'f',类型:int}] – ganesa75

0

我想你想创建一个函数,它是一台发电机,然后调用该函数传入字典,然后产生新的:

orig = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6} 

def make_sub_dictionaries(big_dictionary): 
    for key, val in big_dictionary.iteritems(): 
     yield {'name': key, 'val': val } 

# if you want them one by one, call next 

first = make_sub_dictionaries(orig).next() 

print first 

# if you want all of them 
for d in make_sub_dictionaries(orig): 
    print str(d) 
    # do whatever stuff you need to do 
0

一种方法如下:

OriginalDict = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6} 
newDicts = [{'Name':v} for k,v in enumerate(OriginalDict.values())] 

,这将给你

所有的
>>> newDicts 
[{'Name': 1}, {'Name': 3}, {'Name': 2}, {'Name': 5}, {'Name': 4}, {'Name': 6}] 
0

首先,这将不会保持这个顺序。您需要使用OriginalDict来保存订单。

my_dict={'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6} 
j=0 
for key, value in my_dict.iteritems(): 
    j +=1 
    exec("Dict%s = %s" % (j,{key:value})) 

现在当你输入。

>>> print Dict1 
    {'a':1} 
>>> print Dict2 
    {'c':3}