У меня есть код, который я анализирую. Но я обнаружил, что итерация по словарю опустошает его. Я исправил эту проблему, сделав глубокую скопированность словаря и повторив ее в некотором коде, который отображает значения, а затем использует исходный словарь для повторения этого назначения для назначения значений 2D-массиву. Почему итерация над исходным словарем, чтобы отобразить его, пустая, так что позднее использование словаря непригодно, так как оно теперь пустое? Любые ответы приветствуются.python итерация по словарю emptys it
import copy
# This line fixed the problem
trans = copy.deepcopy(transitions)
print ("\nTransistions = ")
# Original line was:
# for state, next_states in transitions.items():
# Which empties the dictionary, so not usable after that
for state, next_states in trans.items():
for i in next_states:
print("\nstate = ", state, " next_state = ", i)
# Later code which with original for loop showed empty dictionary
for state, next_states in transitions.items():
for next_state in next_states:
print("\n one_step trans state = ", state, " next_state = ", next_state)
one_step[state,next_state] += 1
Отпечаток словаря:
Transistions =
{0: <map object at 0x0000000003391550>, 1: <map object at 0x00000000033911D0>, 2: <map object at 0x0000000003391400>, 3: <map object at 0x00000000033915F8>, 4: <map object at 0x0000000003391320>}
Тип:
Transistions =
<class 'dict'>
Edit: Вот код, который использует карту. Любые предложения о том, как редактировать его, чтобы создать словарь без использования карты?
numbers = dict((state_set, n) for n, state_set in enumerate(sets))
transitions = {}
for state_set, next_sets in state_set_transitions.items():
dstate = numbers[state_set]
transitions[dstate] = map(numbers.get, next_sets)
Перебора Dict не опорожняет его. У вас есть еще одна ошибка. – user2357112
Какой тип 'переходов'? Вы уверены, что это словарь? Попробуйте 'print (type (transitions))' и вставьте результат. –