У меня есть список списков, который я веду, и который по сути функционирует как строка электронной таблицы. Каждый элемент в одном и том же индексе списков принадлежит одной и той же записи. Это позволяет отслеживать открытые транзакции и время от времени удалять закрытые элементы.
Это исходное состояние.
closed_pos = {}
live_pos = {
"TransactionID": [1, 2, 3, 4, 5],
"Status": ["Open", "Closed", "Open", "Closed", "Closed"],
"Item": ["ABC", "DEF", "GHI", "JKL", "MNO"],
"BuyPrice": [5, 10, 15, 20, 5],
"SellPrice": [None, 12, None, 25, 7],
}
Теперь я хочу переместить транзакции, которые периодически закрываются. Причина этого проста. Доступ к live_pos осуществляется чаще, и поэтому он полезен, если я могу облегчить его нагрузку.
Проблема в том, что я не могу надежно удалять элементы из списка, который я перебираю, что является хорошо документированным поведением.
Одно из решений, которое может сработать, — это перебрать список и сохранить отдельный список всех индексов, которые нужно удалить. Переверните список, а затем используйте функцию «добавление», чтобы добиться желаемого поведения, не заморачиваясь с размещением элементов.
indexes_to_remove = []
for i in range(len(live_pos["TransactionID"])):
#Make a list of all indexes of lists to remove
if live_pos["Status"] == "Closed":
indexes_to_remove.append(i)
indexes_to_remove.reverse()
#Reverse the list so that you can use .pop() without problems.
for index in indexes_to_remove:
#remove items by index and feed them in closed_pos
closed_pos["TransactionID"].append(live_pos["TransactionID"].pop(index))
live_pos["Status"].pop(index) # No need to append `Status` to closed_pos. It is always going to be `Closed`
closed_pos["Item"].append(live_pos["Item"].pop(index))
closed_pos["BuyPrice"].append(live_pos["BuyPrice"].pop(index))
closed_pos["SellPrice"].append(live_pos["SellPrice"].pop(index))
print(live_pos)
print(closed_pos)
Это работает, но полученное значение close_pos также меняется на противоположное. Вместо того, чтобы результат был в порядке 2, 4, 5, он будет в порядке 5, 4, 2.
result_live_pos{
"TransactionID": [1, 3],
"Status": ["Open", "Open"],
"Item": ["ABC", "GHI"],
"BuyPrice": [5, 15],
"SellPrice": [None, None],
}
result_closed_pos = {
"TransactionID": [5, 4, 2],
"Item": ["MNO", "JKL", "DEF"],
"BuyPrice": [5, 20, 10],
"SellPrice": [7, 25, 12],
}
Это тот результат, который я ожидаю
closed_pos = {
"TradeID": [2, 4, 5],
"Item": ["DEF", "JKL", "MNO"],
"BuyPrice": [10, 20, 5],
"SellPrice": [12, 25, 7],
}
live_pos = {
"TradeID": [1, 3],
"Status": ["Open", "Open"],
"Item": ["ABC", "GHI"],
"BuyPrice": [5, 15],
"SellPrice": [None, None],
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... sts-in-syn
Как удалить несколько элементов из списка списков, сохраняя при этом синхронизацию списков в Python ⇐ Python
Программы на Python
1731250300
Anonymous
У меня есть список списков, который я веду, и который по сути функционирует как строка электронной таблицы. Каждый элемент в одном и том же индексе списков принадлежит одной и той же записи. Это позволяет отслеживать открытые транзакции и время от времени удалять закрытые элементы.
Это исходное состояние.
closed_pos = {}
live_pos = {
"TransactionID": [1, 2, 3, 4, 5],
"Status": ["Open", "Closed", "Open", "Closed", "Closed"],
"Item": ["ABC", "DEF", "GHI", "JKL", "MNO"],
"BuyPrice": [5, 10, 15, 20, 5],
"SellPrice": [None, 12, None, 25, 7],
}
Теперь я хочу переместить транзакции, которые периодически закрываются. Причина этого проста. Доступ к live_pos осуществляется чаще, и поэтому он полезен, если я могу облегчить его нагрузку.
Проблема в том, что я не могу надежно удалять элементы из списка, который я перебираю, что является хорошо документированным поведением.
Одно из решений, которое может сработать, — это перебрать список и сохранить отдельный список всех индексов, которые нужно удалить. Переверните список, а затем используйте функцию «добавление», чтобы добиться желаемого поведения, не заморачиваясь с размещением элементов.
indexes_to_remove = []
for i in range(len(live_pos["TransactionID"])):
#Make a list of all indexes of lists to remove
if live_pos["Status"][i] == "Closed":
indexes_to_remove.append(i)
indexes_to_remove.reverse()
#Reverse the list so that you can use .pop() without problems.
for index in indexes_to_remove:
#remove items by index and feed them in closed_pos
closed_pos["TransactionID"].append(live_pos["TransactionID"].pop(index))
live_pos["Status"].pop(index) # No need to append `Status` to closed_pos. It is always going to be `Closed`
closed_pos["Item"].append(live_pos["Item"].pop(index))
closed_pos["BuyPrice"].append(live_pos["BuyPrice"].pop(index))
closed_pos["SellPrice"].append(live_pos["SellPrice"].pop(index))
print(live_pos)
print(closed_pos)
Это работает, но полученное значение close_pos также меняется на противоположное. Вместо того, чтобы результат был в порядке 2, 4, 5, он будет в порядке 5, 4, 2.
result_live_pos{
"TransactionID": [1, 3],
"Status": ["Open", "Open"],
"Item": ["ABC", "GHI"],
"BuyPrice": [5, 15],
"SellPrice": [None, None],
}
result_closed_pos = {
"TransactionID": [5, 4, 2],
"Item": ["MNO", "JKL", "DEF"],
"BuyPrice": [5, 20, 10],
"SellPrice": [7, 25, 12],
}
Это тот результат, который я ожидаю
closed_pos = {
"TradeID": [2, 4, 5],
"Item": ["DEF", "JKL", "MNO"],
"BuyPrice": [10, 20, 5],
"SellPrice": [12, 25, 7],
}
live_pos = {
"TradeID": [1, 3],
"Status": ["Open", "Open"],
"Item": ["ABC", "GHI"],
"BuyPrice": [5, 15],
"SellPrice": [None, None],
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79175107/how-to-remove-multiple-items-from-a-dict-of-lists-while-keeping-the-lists-in-syn[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия