我有一个字典和一个清单,如下所示:
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中尝试了几次,但无法破解。
答案 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)
您可以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')}}
答案 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)}}