Форум сайта python.su
0
Нужно проверить на соответствие 2 словаря. В словарь functions копируется те элементы, которые еще не встречались в functions, но есть в funcDefine. Но возникает ошибка KeyError ‘2’, когда я хочу создать новое значение с заданным ключом. Быть может кто знает как решить эту проблему?
file.seek(0) for line in file.readlines(): string=line.replace('\n','') fncInRuby=RubyFunctions(string,cnt) # если полученный словарь не пустой, то просмотрим его if fncInRuby.funcDefine!={}: for key_new in fncInRuby.funcDefine.keys(): NeedSave=1 if functions!={}: for key_old in functions.keys(): if functions[key_old]==fncInRuby.funcDefine[key_new]: NeedSave=0 break if NeedSave==1: functions[key_new]=fncInRuby.funcDefine[key_new] # тут ошибку KeyError '2' показывает
Отредактировано Relrin (Сен. 22, 2012 14:12:51)
Офлайн
3
Метод update не подойдет? Обратите внимание, что значения с одинаковыми ключами перезаписываются.
functions = {1: 'a', 2: 'b', 3: 'c'} print functions funcDefine = {1: 'aa', 2: 'b', 4: 'd'} print funcDefine functions.update(funcDefine) print functions
{1: 'a', 2: 'b', 3: 'c'} {1: 'aa', 2: 'b', 4: 'd'} {1: 'aa', 2: 'b', 3: 'c', 4: 'd'}
Офлайн
0
Viktor_ZorichevДа, спасибо. Учту этот момент.
functions = {1: ‘a’, 2: ‘b’, 3: ‘c’}
print functions
funcDefine = {1: ‘aa’, 2: ‘b’, 4: ‘d’}
print funcDefine
functions.update(funcDefine)
print functions
for key_b in buf.keys(): cnt=0 tmp={} NoKey=False # считаем количество повторов for key in buf.keys(): if buf==buf: cnt+=1 # смотрим в исходный словарь, чтобы было без повторов if functions!={}: for key in functions.keys(): if functions!=buf: NoKey=True else: NoKey=False # запись в словарь tmp[key_b]=[buf[key_b],cnt] if functions=={} or NoKey: functions.update(tmp)
new использовался 2 раз(а)
new использовался 2 раз(а)
add использовался 8 раз(а)
add использовался 8 раз(а)
add использовался 8 раз(а)
add использовался 8 раз(а)
add использовался 8 раз(а)
add использовался 8 раз(а)
add использовался 8 раз(а)
add использовался 8 раз(а)
menu использовался 1 раз(а)
Отредактировано Relrin (Сен. 22, 2012 16:09:12)
Офлайн
0
Решил проблему, сделав так:
def CorrectDict(buf): """ Корректируем словарь до вида КЛЮЧ:["объект","кол-во повторов"], с исключением повторяющихся элементов Входные данные: buf - данные присланные от обработчиков строк в виде словаря """ base={} ListInDict={} for key_b in buf.keys(): cnt=0 # считаем количество повторов for key in buf.keys(): if buf[key_b]==buf[key]: cnt+=1 # запись в словарь ListInDict[key_b]=[buf[key_b],cnt] keys=values=[] for key in buf.keys(): temp={} if (key not in keys) and (ListInDict[key] not in values): temp[key]=ListInDict[key] base.update(temp) keys.append(key) values.append(ListInDict[key]) return base
Отредактировано Relrin (Сен. 22, 2012 17:51:17)
Офлайн
857
>>> funcdict = {1: 'a', 2: 'b', 3: 'c'} >>> funcdefdict = {1: 'aa', 2: 'b', 4: 'd'} >>> >>> funcdict.update(i for i in funcdefdict.items() ... if i[0] not in funcdict) >>> >>> funcdict {1: 'a', 2: 'b', 3: 'c', 4: 'd'} >>>
Офлайн