import string
from collections import namedtuple
from collections import defaultdict
from collections import OrderedDict
matrix_col = {'11234':0, '21234':2, '31223':0, '46541':0, '83432':1, '56443':2, '63324':0, '94334':0, '72443':1}
matrix_col = OrderedDict(sorted(matrix_col.items(), key=lambda t: t[0]))
trans = defaultdict(dict)
trans['11234']['46541'] = 2
trans['11234']['21234'] = 1
trans['11234']['31223'] = 2
trans['11234']['83432'] = 1
trans['21234']['31223'] = 2
trans['21234']['46541'] = 1
trans['21234']['72443'] = 1
trans['21234']['83432'] = 1
trans['56443']['72443'] = 1
trans['56443']['83432'] = 1
for u1, v1 in matrix_col.items():
for u2, v2 in matrix_col.items():
for w1 in trans.keys():
for w2, c in trans[u1].items():
if u1 == str(w1) and u2 == str(w2):
print u1, u2, c
Как указано выше, я пытаюсь напечатать элементы транс (defaultdict) на основе отсортированного порядка элементов в matrix_col (OrderedDict) и не может этого сделать. Ниже представлен ожидаемый результат, который я не могу сгенерировать:Python: элементы печати в defaultdict на основе порядка в OrderedDict
11234 11234 0
11234 21234 1
11234 31223 2
11234 46541 2
11234 56443 0
11234 63324 0
11234 72443 0
11234 83432 1
11234 94334 0
21234 11234 0
21234 21234 0
21234 31223 2
21234 46541 1
21234 56443 0
21234 63324 0
21234 72443 1
21234 83432 1
21234 94334 0
31223 11234 0
31223 21234 0
31223 31223 0
31223 46541 0
31223 56443 0
31223 63324 0
31223 72443 0
31223 83432 0
31223 94334 0
...
Любая помощь приветствуется.
Поскольку вы явно писать Python 2 код, мне нужно указать: 'если u1 в trans.keys(): '- ужасная строка кода. 'trans.keys()' на Python 2 создает новый «список» ключей, поэтому вы делаете довольно большой объект при каждом тестировании, а затем сканируете его линейно для удара, вместо того, чтобы делать «O (1) 'членский тест непосредственно с' if u1 in trans: '. Точно так же большинство применений '.items()' должно быть, вероятно, '.iteritems()' или '.viewitems()' для итерации напрямую, вместо того, чтобы создавать 'list', которые копируют их (plain '.keys()' /'.items() 'полезно, если вы будете мутировать' dict' во время итерации). – ShadowRanger