Мне просто нужно было объединить словарный номер неизвестного номера и после того, как мы увидели ответы на этот вопрос, появились более универсальные решения:
1) словари значений:
dic1 = {'A': 1, 'B': 1, 'C': 1}
dic2 = {'A': 2, 'B': 2, 'C': 2}
dic3 = {'D': 3, 'E': 3, 'F': 3}
def combineDictVal(*args):
result = {}
for dic in args:
for key in (result.viewkeys() | dic.keys()):
if key in dic:
result.setdefault(key, []).append(dic[key])
return result
print combineDictVal(dic1, dic2, dic3)
Результат : {'A': [1, 2], 'C': [1, 2], 'B': [1, 2], 'E': [3], 'D': [3], 'F': [3]}
2) словари списков (различие находится в append / extend *):
dic1 = {'A': [1, 2], 'B': [1, 2], 'C': [1, 2]}
dic2 = {'A': [3, 4], 'B': [3, 4], 'C': [3, 4]}
dic3 = {'D': [5, 6], 'E': [5, 6], 'F': [5, 6]}
def combineDictList(*args):
result = {}
for dic in args:
for key in (result.viewkeys() | dic.keys()):
if key in dic:
result.setdefault(key, []).extend(dic[key])
return result
print combineDictList(dic1, dic2, dic3)
Результат: {'A': [1, 2, 3, 4], 'C': [1, 2, 3, 4], 'B': [1, 2, 3, 4], 'E': [5, 6], 'D': [5, 6], 'F': [5, 6]}
3) Universal для int / lists:
dic1 = {'A': 1, 'B': 1, 'C': [1, 1]}
dic2 = {'A': 2, 'B': [2, 2], 'C': 2}
dic3 = {'D': 3, 'E': 3, 'F': [3, 3]}
def combineDict(*args):
result = {}
for dic in args:
for key in (result.viewkeys() | dic.keys()):
if key in dic:
if type(dic[key]) is list:
result.setdefault(key, []).extend(dic[key])
else:
result.setdefault(key, []).append(dic[key])
return result
print combineDict(dic1, dic2, dic3)
Результат:
{'A': [1, 2], 'C': [1, 1, 2], 'B': [1, 2, 2], 'E': [3], 'D': [3], 'F': [3, 3]}
Эти решения не являются максимально возможными, однако они ясны и работают нормально. Надеюсь, это поможет кому-то.
Вы можете сказать
python -m py_compile script_to_check.py
Однако это будет иметь побочный эффект в виде создания скомпилированного файла script_to_check.pyc
в том же каталоге, что и ваш скрипт. Эта функция предназначена для ускорения последующего использования модуля, а не для проверки правильности синтаксиса, хотя вы, безусловно, можете использовать его для этого.
Начиная с версии 2.6, существует пакет компилятора . На этой странице не говорится, есть ли замена в версии 3.0, или вы просто не можете этого сделать.
Еще лучше запустить pyflakes , pychecker или, возможно, pylint в коде. Они выявляют некоторые распространенные ошибки, которых не будет при компиляции.