使用列表中的值更新字典中的值

时间:2018-11-30 17:46:01

标签: python json python-3.x list dictionary

我有一个字典和一个清单,如下所示:

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

我希望将list_max_quota10010中的每个列表项附加到api_key_data中内部字典的值上,并且看起来应该像:

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

有人可以帮忙吗?我在Python3中尝试了几次,但无法破解。

3 个答案:

答案 0 :(得分:0)

您可以迭代字典并更新值。

这假设您的字典按照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)}}

答案 1 :(得分:0)

您可以zipapi_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')}}

答案 2 :(得分:0)

如果您可以假设该字典记住了其插入顺序(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)}}