У меня есть словарь и список, как показано ниже:
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, но не смог взломать.
Вы можете 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')}}
Вы можете перебирать словарь и обновлять значения.
Это предполагает, что ваш словарь вставляется в соответствии с вашим определением 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)}}
Если вы можете предположить, что 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)}}