Удалить элементы из словаря, если длина элемента равна 1 или меньше - PullRequest
0 голосов
/ 25 ноября 2018

Есть ли способ удалить ключ из словаря, используя его индексную позицию (если она есть) вместо использования фактического ключа (чтобы избежать, например, del d['key'], но вместо этого использовать индексную позицию)?

Если есть, не беспокойтесь о прочтении остальной части этого вопроса, так как это то, что я тоже ищу.


Итак, в качестве примера для моего случая, я имеюсловарь d, который использует списки для значений:

d = {'acd': ['cad'], 'abd': ['bad', 'dab']}

Я хочу полностью удалить каждый ключ из такого словаря, у которого значения значений имеют длину менее 2 (поэтому, если есть только 1 элемент).

Итак, в этом примере я бы хотел удалить ключ 'acd', поскольку в списке его значений есть только 1 элемент ['cad'].'abd' имеет 2 элемента ['bad', 'dab'], поэтому я не хочу его удалять - только если он содержит 1 или менее элементов.Этот словарь является лишь примером - я работаю с гораздо большей версией, чем эта, и мне нужно, чтобы он удалил все ключи значений одного элемента.

Я написал это для тестирования, но я не уверен, какиди, убирая ключи, которые я хочу, или определяя, какие они есть.

d = {'acd': ['cad'], 'abd': ['bad', 'dab']}

index_pos = 0

for i in d.values():

    #Testing and seeing stuff
    print("pos:", index_pos)
    print(i)
    print(len(i))

    if len(i) < 2:

        del d[???]
        #What do I do?

    index_pos += 1

Я использовал index_pos, потому что думал, что это может быть полезно, но я не уверен.

Я знаю, что могу удалить запись из словаря, используя

del d['key']

Но как мне избежать использования ключа и, например, использовать вместо него позицию индекса или как узнать, что это за ключ, чтобы я мог удалить его?

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Если вы не хотите создавать новые условия, вот как вы можете изменить свой код.Здесь мы перебираем копию нашего dict и затем удаляем ключи нашего исходного dict, если длина его значения меньше 2.

d = {'acd': ['cad'], 'abd': ['bad', 'dab']}

for key in d.copy():
    if len(d[key]) < 2:
        del d[key]

print(d)
0 голосов
/ 25 ноября 2018

Просто используйте понимание словаря:

d = {'acd': ['cad'], 'abd': ['bad', 'dab']}
res = {k: v for k, v in d.items() if len(v) >= 2}

Да, вы создаете новый словарь, но это само по себе обычно не является проблемой.Любое решение займет O ( n ) времени.

Вы можете повторить копию своего словаря при изменении исходного.Тем не менее, вы должны найти понимание словаря более эффективным.Ни при каких обстоятельствах не удаляйте и не добавляйте ключи, пока вы повторяете исходный словарь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...