Форум сайта python.su
1
Добрый день. Написал следующий код для поиска вхождения строки в значении вложенного словаря. Совершается обход ключей и значений, данные сохраняются в пустой словарь. Непонятно, почему сохраняется только первое вхождение, остальное пропадает, тогда как инструкция print выводит все пары ключ: значение. Что не так?
search_string = 'Spam' d = {1: {1: {'string': 'Spam', }, 2: {'string': 'Spam, Spam'}, 3: {'string': 'Ham'}}} dict_result = {} for key, value in d.iteritems(): for key1, value1 in d[key].iteritems(): for key2, value2 in d[key][key1].iteritems(): if search_string in str(value2): #print [key, key1, value2] #>>> [1, 1, 'Spam'] #>>> [1, 2, 'Spam'] dict_result.update({key: {key1: value2}}) print dict_result >>> {1: {2: 'Spam'}}
Отредактировано to_night (Дек. 13, 2013 00:11:17)
Офлайн
58
По Вашему вопросу:
search_string = 'Spam' d = {1: {1: {'string': 'Spam'}, 2: {'string': 'Spam, Spam'}, 3: {'string': 'Ham'}}} dict_result = {} # for key, value in d.iteritems(): for key1, value1 in value.iteritems(): for key2, value2 in value1.iteritems(): if search_string in str(value2): dict_result.setdefault(key, {}).update({key1: value2}) print dict_result
search_string = 'Spam' d = {1: {1: {'string': 'Spam'}, 2: {'string': 'Spam, Spam'}, 3: {'string': 'Ham'}}} dict_result = {} # def find_string(dict_): for data in dict_.itervalues(): if type(data) is dict: find_string(data) else: print data # find_string(d)
Отредактировано 4kpt_II (Дек. 12, 2013 22:24:04)
Офлайн