Обновление значений в словаре со значениями из списка - PullRequest
0 голосов
/ 30 ноября 2018

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

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, но не смог взломать.

Ответы [ 3 ]

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

Вы можете 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 голосов
/ 30 ноября 2018

Если вы можете предположить, что dict запоминает свой порядок вставки (CPython 3.6+, Python3.7), то есть что ключ '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)}}
0 голосов
/ 30 ноября 2018

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

Предполагается, что ваш словарь упорядочен по вставке согласно вашему определению api_key_data, и должен использоваться только в Python 3.7+(хотя это верно как деталь реализации в 3.6).До версии 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)}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...