Получить новый диктат от старого диктата с условием? - PullRequest
0 голосов
/ 03 декабря 2009

Я словарь (словарь словаря)

    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},
    }

Хочу получить новый словарь, который до ['check']! = 0 и до ['status']! = 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 ]

5 голосов
/ 03 декабря 2009
new_dict = {}
for k, d in old_dict.iteritems():
    if d['check'] == 0 and d['status'] == 0:
        new_dict[k] = d
5 голосов
/ 03 декабря 2009

Удаление [] из ответа 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)
3 голосов
/ 03 декабря 2009
dict([x for x in old_dict.iteritems() if x[1]['status']==0 and x[1]['check']==0])

old_dict.iteritems () возвращает вам список пар. Который вы затем фильтруете и конвертируете обратно в словарь.

1 голос
/ 03 декабря 2009
outputdata = dict([d for d in data.iteritems() if d[1][1] == ' 0' and d[1][6]==' 0'])
0 голосов
/ 03 декабря 2009

Не очень интересно, не знаю, почему я на это отвечаю.

In [17]: dict([(k, v) for k, v in old_dict.items() if v['check'] == 0 and v['status'] == 0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...