#python #python-3.x #numpy #numpy-ndarray
#python #python-3.x #numpy #numpy-ndarray
Вопрос:
У меня есть словарь Python, как показано ниже. В котором вы можете видеть, что некоторые values
из них являются нулями для данного key
. Я хочу создавать вложенные словари из основного словаря всякий раз, когда он содержит ненулевые значения.
74: (0, 0, 0, 0, 0),
75: (0, 0, 0, 0, 0),
76: (0, 0, 0, 0, 0),
77: (69, 76, 151, 157, 42),
78: (68, 78, 150, 160, 100),
79: (69, 77, 151, 159, 64),
80: (69, 77, 151, 159, 64),
81: (71, 74, 154, 158, 12),
82: (0, 0, 0, 0, 0),
83: (0, 0, 0, 0, 0),
84: (0, 0, 0, 0, 0),
85: (0, 0, 0, 0, 0),
86: (0, 0, 0, 0, 0),
87: (0, 0, 0, 0, 0),
88: (0, 0, 0, 0, 0),
89: (0, 0, 0, 0, 0),
90: (0, 0, 0, 0, 0),
91: (0, 0, 0, 0, 0),
92: (0, 0, 0, 0, 0),
93: (0, 0, 0, 0, 0),
94: (0, 0, 0, 0, 0),
95: (64, 68, 150, 153, 12),
96: (63, 79, 148, 159, 176),
97: (64, 79, 148, 159, 165),
98: (63, 81, 146, 175, 522),
99: (63, 82, 145, 179, 646),
Например, в приведенном выше случае я должен иметь возможность создать два вложенных словаря (из 77-81 и 95-99). Как я могу добиться этого в Python?
Комментарии:
1. Почему теги numpy?
Ответ №1:
Используйте понимание dict с условием:
output = {key: value for key, value in orig_dict.items() if all(value)}
Если вы хотите быть более явным:
output = {key: value for key, value in orig_dict.items() if all(n != 0 for n in value)}
В обоих случаях output
является
{77: (69, 76, 151, 157, 42),
78: (68, 78, 150, 160, 100),
79: (69, 77, 151, 159, 64),
80: (69, 77, 151, 159, 64),
81: (71, 74, 154, 158, 12),
95: (64, 68, 150, 153, 12),
96: (63, 79, 148, 159, 176),
97: (64, 79, 148, 159, 165),
98: (63, 81, 146, 175, 522),
99: (63, 82, 145, 179, 646)}
Приведенный выше пример добавит запись в новый словарь тогда и только тогда, когда все числа в кортеже отличны от нуля. Если вы хотите добавить запись, если какое-либо число не равно нулю, измените all
на any
.
Если вам нужны 2 (или более) словаря, используйте цикл с дополнительными условиями:
a = {}
b = {}
for key, value in orig_dict.items():
if all(value):
if key in range(77, 82):
a[key] = value
elif key in range(95, 100):
b[key] = value
Комментарии:
1. Если я правильно прочитал вопрос, то у вас ошибка. Вам нужно
any()
, а неall()
.2. @StuartBerg Текущая формулировка и пример немного неоднозначны, я добавлю уточнение
3. Спрашивающий мог бы уточнить, сообщив нам, что должно произойти с записью типа
(64, 68, 150, 153, 0)
, если такие значения возможны в их данных.4. Спасибо!! Но как я могу иметь два вложенных словаря? один содержит ключ из 77-81, а другой содержит 95-99?
5. @ Stuart Berg такие записи невозможны в соответствии с определением проблемы. Спасибо!