Pythonic способ установки всех других значений ключа на 0, кроме первого значения - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть вложенный словарь:

nested_dict = { 
               19376: {
                      'key1': 'SAL/2018/4207', 
                      'premium_due_amount': 1162239.98,
                      }, 
               19377: {'key1': 'SAL/2018/4207', 
                       'premium_due_amount': 1162239.98,
                      }, 
               19378: {
                       'key1': 'SAL/2018/4207', 
                       'premium_due_amount': 1162239.98,
                      } 
              }

Здесь В каждом словаре у меня есть key1 и premium_due_amount .

Поскольку key1 уже задан в первом словаре, я хочу изменить значения всех других premium_due_amount , кроме первого, на 0.

Ожидаемый результат

nested_dict = { 
               19376: {
                      'key1': 'SAL/2018/4207', 
                      'premium_due_amount': 1162239.98,
                      }, 
               19377: {'key1': 'SAL/2018/4207', 
                       'premium_due_amount': 0,
                      }, 
               19378: {
                       'key1': 'SAL/2018/4207', 
                       'premium_due_amount': 0,
                      } 
              }

Текущее решение:

key1_list = [] 
for key, vals in nested_dict.items(): 
   if vals['key1'] in key1_list: 
       vals.update({'premium_due_amount': 0}) 
   key1_list.append(vals['key1'])

Пожалуйста, предложите более простой и питонский способ сделать это.

1 Ответ

0 голосов
/ 12 сентября 2018

IIUC, вы хотите установить каждое значение на 0, кроме тех, которые принадлежат наименьшему ключу. Это должно работать на любом python3.x, поскольку dict.keys() возвращает объект set- , подобный , с которым можно выполнять операции над множествами.

for k in nested_dict.keys() - {min(nested_dict)}:
     nested_dict[k]['premium_due_amount'] = 0

print (nested_dict)

{19376: {'key1': 'SAL/2018/4207', 'premium_due_amount': 1162239.98},
 19377: {'key1': 'SAL/2018/4207', 'premium_due_amount': 0},
 19378: {'key1': 'SAL/2018/4207', 'premium_due_amount': 0}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...