2009-12-03 40 views
0

我的字典(词典的词典)从旧词典获取新的词典与条件?

old_dict = { 
    '1':{'A':1, 'check': 0, 'AA':2, 'AAA':3 , 'status':0}, 
    '2':{'A':11,'check': 0, 'AA':22, 'AAA':33 ,'status':1}, 
    '3':{'A':111,'check': 0, 'AA':222, 'AAA':333 ,'status':0}, 
    '4':{'A':1111,'check': 1, 'AA':2222, 'AAA':3333 ,'status':0}, 
    } 

我想获得一个新的字典,以前[“检查”]!= 0和前[“状态”]!= 0 所以会

new_dict = { 
    '1':{'A':1, 'check': 0, 'AA':2, 'AAA':3 , 'status':0}, 
    '3':{'A':111,'check': 0, 'AA':222, 'AAA':333 ,'status':0}, 
    } 

如果它是一个列表我不喜欢这个

ouputdata = [d for d in data if d[1] == ' 0' and d[6]==' 0'] 

我已经试过

for field in old_dict.values(): 
     if field['check'] !=0 and field['status'] != 0 
      line = field['A'] + field['AA']+field['AAA'] 
     #write these line to file 

如何使用字典。 你能帮我与字典使其

回答

5
new_dict = {} 
for k, d in old_dict.iteritems(): 
    if d['check'] == 0 and d['status'] == 0: 
     new_dict[k] = d 
3
dict([x for x in old_dict.iteritems() if x[1]['status']==0 and x[1]['check']==0]) 

old_dict.iteritems()返回你对的列表。然后您将其过滤并转换回字典。

1
outputdata = dict([d for d in data.iteritems() if d[1][1] == ' 0' and d[1][6]==' 0']) 
+0

这将返回 “KeyError异常:1”,因为字典的元素实际上是字典。 –

+0

呃,不是吗? 'iteritems()'返回一个2元组列表。 – Amber

+0

没错。元组[0]是键,而元组[1]是值。并且原始文章中的值是字典,如{'A':1,'check':0,'AA':2,'AAA':3,'status':0} –

0

不是很有趣,不知道我为什么回答它。

In [17]: dict([(k, v) for k, v in old_dict.items() if v['check'] == 0 and v['status'] == 0]) 
+0

对你来说不是很有意思,但你的回答对我来说很有意思。 – kn3l

5

掉落[]从yu_sha的回答可以避免构建一个虚拟目录:

new_dict = dict((k,v) for k,v in old_dict.iteritems() 
         if v["status"] != 0 and v["check"] != 0) 

new_dict = dict(item for item in old_dict.iteritems() 
         if item[1]["status"] != 0 and item[1]["check"] != 0)