Задать вопрос
@rustohero
костыль

Как удалить все нулевые элементы из словаря?

Есть словарь вида: {user1 { var1: 2, var2: 0, var3: 1, var4: 0}, user2 {var1: 0, var2: 1, var3: 0, var4: 0}, user3{ var1:1, var2: 0, var3:0, var4:0}}
Как удалить все ключи "подсловарей" с нулевыми значениями, таким образом, чтоб получилось:
{user1 { var1: 2, var3: 1}, user2 {var2: 1}, user3{ var1:1}}.

Пробовал, но смог реализовать только функцией, куда передается user. Такая реализация неприемлема т.к. кол-во user'ов большое.
P.S. Проблем бы не возникло, если бы словарь был "одномерным"
  • Вопрос задан
  • 640 просмотров
Подписаться 2 Оценить 1 комментарий
Решения вопроса 3
@abcd0x00
Нужно пройти его рекурсивно.
>>> def f(d):
...     for i in set(d):
...         e = d[i]
...         if isinstance(e, dict):
...             f(e)
...         elif e == 0:
...             del d[i]
... 
>>> d = {'user1': {'var1': 2,
...                'var2': 0,
...                'var3': 1,
...                'var4': 0},
...      'user2': {'var1': 0,
...                'var2': 1,
...                'var3': 0,
...                'var4': 0},
...      'user3': {'var1': 1,
...                'var2': 0,
...                'var3': 0,
...                'var4': 0}}
>>> 
>>> f(d)
>>> d
{'user3': {'var1': 1}, 'user2': {'var2': 1}, 'user1': {'var1': 2, 'var3': 1}}
>>>
Ответ написан
alsopub
@alsopub
Как вариант:
list = {'user1' : { 'var1': 2, 'var2': 0, 'var3': 1, 'var4': 0}, 'user2' : {'var1': 0, 'var2': 1, 'var3': 0, 'var4': 0}, 'user3' : { 'var1':1, 'var2': 0, 'var3':0, 'var4':0}}

for u in list:
  for i in list[u]:
    if list[u][i] == 0:
      del list[u][i]

print(list)
Ответ написан
aRegius
@aRegius
Python Enthusiast
Это можно сделать, используя самые базовые инструменты Python (по умолчанию,
присвоим словарь переменной d):

d1 = {}

for value in d.values():
    d1.update(value)

for key in d:
    for key1 in d1:
        if d[key][key1] == 0:
            del d[key][key1]


Пользуйтесь на здоровье.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы