py 2.7. У меня есть словарь списков. Каждый цикл каждого списка перезаписывается новой обновленной версией.Добавление/переписывание словаря в зависимости от элементов
Я использую систему частиц третьей стороны. То, что я делаю, состоит в том, что каждый ключ является номером индекса частицы, а список - его позицией и предыдущими позициями.
Но когда частица «умирает», индексы частиц все смещаются. Ключ будет перезаписан неправильно, когда рождается новая частица с тем же индексом, что и мертвая частица. Я хочу сохранить этот ключ с позициями мертвой частицы.
Вот код, как сейчас:
if frame == 0:
branches = {}
...
for p in xrange(particle_count):
xp = emitter.GetParticle(p) #xp = current particle
trail = []
index = xp.GetIndex()
trail_length = xp.GetCustomDataCount() #number of previous positions
for i in xrange(trail_length):
previous_position = xp.GetCustomData(i)
trail.append(previous_position)
branches [index] = trail
Я думал сравнивая первый элемент каждого списка с первым элементом списка, который он пытается перезаписать. Тогда, если это не так, добавьте 1 к номеру индекса, пока не появится свободное место ...?
EDIT - Я добился дальнейшего прогресса и определил, что мне нужно сделать, но не знаю питона. Вот некоторые новый код:
for p in xrange(particle_count):
xp = emitter.GetParticle(p) #xp = current particle
trail = []
index = xp.GetIndex()
trail_length = xp.GetCustomDataCount()
for i in xrange(trail_length):
previous_position = xp.GetCustomData(i)
trail.append(previous_position)
if index in branches:
this_trail = trail[0]
set_trail = branches[index]
set_trail = set_trail[0]
if this_trail == set_trail:
branches[index] = trail
else:
for b in branches:
set_trail = branches[b]
set_trail = set_trail[0]
if this_trail == set_trail:
branches[index] = trail
break
else:
branches[index] = trail
Проблема: Когда я говорю «если индекс в отраслях ..» Я проверяю каждую запись матча. Если тропы одинаковы, старый перезаписывается новым. Однако, если индекс существует в словаре, но не совпадает с записью, ничего не произойдет. Вот что мне нужно:
if index in branches:
this_trail = trail[0]
set_trail = branches[index]
set_trail = set_trail[0]
if this_trail == set_trail:
branches[index] = trail
else:
check all entries for a match(like i currently do)
if match, overwrite entry
if no match, add entry to a non-existing key
else:
branches[index] = trail
Если вы основываете некоторые вычисления на основе этого, не сохраняете в другом индексе (другую позицию), вызывают проблемы позже? Не можете ли вы просто скопировать словарь (и сохранить где-нибудь еще), когда увидите, что частица мертва, и начать с нового словаря? –
Привет Ананд. Это имело бы смысл. Но этот момент в коде - это в значительной степени конец скрипта. Все, что я делаю после этого, идет по пути частицы и рисует линию на экране, например, соединяет точки. Я не называю это иначе, так что это не имеет значения. – tanzola
Так вы сталкиваетесь с любыми проблемами с помощью метода, который вы указали в конце? В чем проблема? –