Удаление индексов из словаря - PullRequest
1 голос
/ 27 апреля 2019

Дан список с несортированными индексами в списке длиной n.Каждый элемент списка содержится только один раз.Таким образом, список выглядит так:

L = [13, 145, 70001, 34, ..., 533]

Также дано значение dictionary d, числовые значения которого приведены в качестве ключа.Все значения являются элементом {0,1}.Как

d = {
        "[some data]" : 0,
        "[some data]" : 1,
        "[some data]" : 1,
        "[some data]" : 1,
        ...
        "[some data]" : 0
    }

В словаре d гораздо больше записей, чем в списке L.

Что я хочу сделать, это удалить данные из словаря для каждой позиции(индекс) от L, если это 0.

Проблема, с которой я сталкиваюсь при обработке, заключается в том, что после каждого удаления индексы должны быть сдвинуты, так как позиция в словаре меняется.Что довольно неэффективно в отношении большого количества предметов в L.Должен быть эффективный способ решения этой задачи.

Любые идеи и предложения высоко ценятся!

Ответы [ 3 ]

6 голосов
/ 27 апреля 2019

Обратите внимание, что вы не должны ожидать, что сможете сделать это, так как большинство словарей реализаций не упорядочены, но Python имеет значение с 3,6 и часть спецификации в 3.7 - нона вопрос.

Мы можем использовать словарное понимание с enumerate, чтобы создать новый словарь, чтобы нам не пришлось беспокоиться о бизнесе по смещению индекса, который беспокоит вас.

L_ = set(L)
d = {k: v for i, (k, v) in enumerate(dict.items()) if i not in L_ and v}
0 голосов
/ 27 апреля 2019

Я предлагаю вместо непосредственного удаления элемента обновить его, например, -1, а в конце удалить все записи -1

0 голосов
/ 27 апреля 2019

dictionary.keys() и dictionary.values() оба возвращают индексируемые списки в python 2

Как отмечает @grooveplex, в python 3 вы можете обернуть каждую из них list() для того же эффекта

...