Обновление значений в словаре со значениями из списка

1

У меня есть словарь и список, как показано ниже:

api_key_data = {'rpnwky': {'mef11me4wj': 66, 'owputivesc': 0}, 'nlhjqa': {'7ey5cgtm59': 0}}
list_max_quota = [100, 10]

Я хочу, чтобы каждый элемент списка в list_max_quota составлял 100 и 10 для добавления к внутренним словарям api_key_data и он должен выглядеть примерно так:

{
'rpnwky': {'mef11me4wj': (66,100), 'owputivesc': (0,100)},
'nlhjqa': {'7ey5cgtm59': (0,10) }
}

Кто-то может помочь? Я попробовал это несколько раз в Python3, но не смог взломать.

  • 4
    Как определяется, добавляется ли 100 или 10?
Теги:
list
python-3.x
dictionary

3 ответа

0

Вы можете zip на api_key_data ключи, ценности и list_max_quota значения вместе, а затем использовать список понимание для форматирования значения, как вы хотите.

Это предполагает, что каждый list_max_quota соответствует api_key_data своим соответствующим расположением в структурах данных.

api_key_data = {'rpnwky': {'mef11me4wj': 66, 'owputivesc': 0}, 'nlhjqa': {'7ey5cgtm59': 0}}
list_max_quota = ['100', '10']

print({key: {k: (v, max_quota) for k, v in value.items()} 
    for key, value, max_quota in zip(api_key_data.keys(), api_key_data.values(), list_max_quota)})

Выход:

{'rpnwky': {'mef11me4wj': (66, '100'), 'owputivesc': (0, '100')}, 'nlhjqa': {'7ey5cgtm59': (0, '10')}}
0

Вы можете перебирать словарь и обновлять значения.

Это предполагает, что ваш словарь вставляется в соответствии с вашим определением api_key_data и должен приниматься только на Python 3. 7+ (хотя это верно как деталь реализации в 3.6). Pre-3.6, словари неупорядочены.

api_key_data = {'rpnwky': {'mef11me4wj': 66, 'owputivesc': 0},
                'nlhjqa': {'7ey5cgtm59': 0}}

list_max_quota = ['100', '10']

values = iter(map(int, list_max_quota))

for k, v in api_key_data.items():
    value = next(values)
    for k2, v2 in v.items():
        v[k2] = (v2, value)

print(api_key_data)

{'rpnwky': {'mef11me4wj': (66, 100), 'owputivesc': (0, 100)},
 'nlhjqa': {'7ey5cgtm59': (0, 10)}}
  • 0
    Спасибо ребята, у меня сработало гладко
  • 0
    @HemantKumar, конечно. Не забудьте принять (зеленая галочка слева) ответ, который помог.
0

Если вы можете предположить, что dict помнит свой порядок вставки (CPython 3. 6+, Python3.7), т. 'rpnwky' Ключ 'rpnwky' предшествует ключу 'nlhjqa' при повторении data, вы можете выдать:

>>> api_key_data = {'rpnwky': {'mef11me4wj': 66, 'owputivesc': 0}, 'nlhjqa': {'7ey5cgtm59': 0}}
>>> list_max_quota = [100, 10]
>>> 
>>> for (k, inner_dict), quota in zip(api_key_data.items(), list_max_quota):
...     api_key_data[k] = {inner_key: (v, quota) for inner_key, v in inner_dict.items()}
... 
>>> api_key_data
{'rpnwky': {'mef11me4wj': (66, 100), 'owputivesc': (0, 100)}, 'nlhjqa': {'7ey5cgtm59': (0, 10)}}

Если вы не можете положиться на порядок api_key_data, сделайте list_max_quota словарь.

>>> api_key_data = {'rpnwky': {'mef11me4wj': 66, 'owputivesc': 0}, 'nlhjqa': {'7ey5cgtm59': 0}}
>>> dict_max_quota = {'rpnwky': 100, 'nlhjqa': 10}
>>> 
>>> for k, inner_dict in api_key_data.items():
...     api_key_data[k] = {inner_key: (v, dict_max_quota[k]) for inner_key, v in inner_dict.items()}
... 
>>> api_key_data
{'rpnwky': {'mef11me4wj': (66, 100), 'owputivesc': (0, 100)}, 'nlhjqa': {'7ey5cgtm59': (0, 10)}}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню