[英]Python extract specific values from dictionary
我有以下字典:
My_dict={'K0A1': 0.12, 'K1A1': 0.12, 'K2A1': 0.12, 'K3A1': 0.12, 'K0A2': 0.16, 'K1A2': 0.16, 'K2A2': 0.16, 'K3A2': 0.16, 'K0A3': 0.04, 'K1A3': 0.04, 'K2A3': 0.04, 'K3A3': 0.04, 'K0B1': 0.04, 'K1B1': 0.04, 'K2B1': 0.04, 'K3B1': 0.04, 'K0B2': 0.08, 'K1B2': 0.08, 'K2B2': 0.08, 'K3B2': 0.08, 'K0B3': 0.04, 'K1B3': 0.04, 'K2B3': 0.04, 'K3B3': 0.04, 'K0C1': 0.08, 'K1C1': 0.08, 'K2C1': 0.08, 'K3C1': 0.08, 'K0C2': 0.04, 'K1C2': 0.04, 'K2C2': 0.04, 'K3C2': 0.04, 'K0C3': 0.04, 'K1C3': 0.04, 'K2C3': 0.04, 'K3C3': 0.04, 'K0D1': 0.08, 'K1D1': 0.08, 'K2D1': 0.08, 'K3D1': 0.08, 'K0D2': 0.08, 'K1D2': 0.08, 'K2D2': 0.08, 'K3D2': 0.08, 'K0D3': 0.12, 'K1D3': 0.12, 'K2D3': 0.12, 'K3D3': 0.12}
我想在单独的列表中提取 K0A1、K0A2、K0A3 的值。 K0B1、K0B2、K0B3 等类似,直到最后。 我该怎么做? 任何人都可以请提出一个解决方案
如果您想通过键的第二个和第三个字符对所有子字典进行分组(如果逻辑不同,您实际上可以使用任何其他 function),您可以使用嵌套的defaultdict
:
from collections import defaultdict
d = defaultdict(lambda:defaultdict(dict))
for k,v in My_dict.items():
d[k[1:3]][k] = v
out = {k: dict(v) for k,v in d.items()}
Output:
{'0A': {'K0A1': 0.12, 'K0A2': 0.16, 'K0A3': 0.04},
'1A': {'K1A1': 0.12, 'K1A2': 0.16, 'K1A3': 0.04},
'2A': {'K2A1': 0.12, 'K2A2': 0.16, 'K2A3': 0.04},
'3A': {'K3A1': 0.12, 'K3A2': 0.16, 'K3A3': 0.04},
'0B': {'K0B1': 0.04, 'K0B2': 0.08, 'K0B3': 0.04},
'1B': {'K1B1': 0.04, 'K1B2': 0.08, 'K1B3': 0.04},
'2B': {'K2B1': 0.04, 'K2B2': 0.08, 'K2B3': 0.04},
'3B': {'K3B1': 0.04, 'K3B2': 0.08, 'K3B3': 0.04},
'0C': {'K0C1': 0.08, 'K0C2': 0.04, 'K0C3': 0.04},
'1C': {'K1C1': 0.08, 'K1C2': 0.04, 'K1C3': 0.04},
'2C': {'K2C1': 0.08, 'K2C2': 0.04, 'K2C3': 0.04},
'3C': {'K3C1': 0.08, 'K3C2': 0.04, 'K3C3': 0.04},
'0D': {'K0D1': 0.08, 'K0D2': 0.08, 'K0D3': 0.12},
'1D': {'K1D1': 0.08, 'K1D2': 0.08, 'K1D3': 0.12},
'2D': {'K2D1': 0.08, 'K2D2': 0.08, 'K2D3': 0.12},
'3D': {'K3D1': 0.08, 'K3D2': 0.08, 'K3D3': 0.12}}
要访问单个子组:
out['0A']
# {'K0A1': 0.12, 'K0A2': 0.16, 'K0A3': 0.04}
from collections import defaultdict
d = defaultdict(list)
for k,v in My_dict.items():
d[k[:3]].append(v)
out=dict(d)
Output:
{'K0A': [0.12, 0.16, 0.04],
'K1A': [0.12, 0.16, 0.04],
'K2A': [0.12, 0.16, 0.04],
'K3A': [0.12, 0.16, 0.04],
'K0B': [0.04, 0.08, 0.04],
'K1B': [0.04, 0.08, 0.04],
'K2B': [0.04, 0.08, 0.04],
'K3B': [0.04, 0.08, 0.04],
'K0C': [0.08, 0.04, 0.04],
'K1C': [0.08, 0.04, 0.04],
'K2C': [0.08, 0.04, 0.04],
'K3C': [0.08, 0.04, 0.04],
'K0D': [0.08, 0.08, 0.12],
'K1D': [0.08, 0.08, 0.12],
'K2D': [0.08, 0.08, 0.12],
'K3D': [0.08, 0.08, 0.12]}
如果我正确理解您的问题,您可以遍历密钥并存储您想要的密钥。 下面是一个例子:
My_dict={'K0A1': 0.12, 'K1A1': 0.12, 'K2A1': 0.12, 'K3A1': 0.12, 'K0A2': 0.16, 'K1A2': 0.16, 'K2A2': 0.16, 'K3A2': 0.16, 'K0A3': 0.04, 'K1A3': 0.04, 'K2A3': 0.04, 'K3A3': 0.04, 'K0B1': 0.04, 'K1B1': 0.04, 'K2B1': 0.04, 'K3B1': 0.04, 'K0B2': 0.08, 'K1B2': 0.08, 'K2B2': 0.08, 'K3B2': 0.08, 'K0B3': 0.04, 'K1B3': 0.04, 'K2B3': 0.04, 'K3B3': 0.04, 'K0C1': 0.08, 'K1C1': 0.08, 'K2C1': 0.08, 'K3C1': 0.08, 'K0C2': 0.04, 'K1C2': 0.04, 'K2C2': 0.04, 'K3C2': 0.04, 'K0C3': 0.04, 'K1C3': 0.04, 'K2C3': 0.04, 'K3C3': 0.04, 'K0D1': 0.08, 'K1D1': 0.08, 'K2D1': 0.08, 'K3D1': 0.08, 'K0D2': 0.08, 'K1D2': 0.08, 'K2D2': 0.08, 'K3D2': 0.08, 'K0D3': 0.12, 'K1D3': 0.12, 'K2D3': 0.12, 'K3D3': 0.12}
values = []
for myKey in list(My_dict.keys()):
if myKey[0:2] == 'K0' and (myKey[3] == '1' or myKey[3] == '2' or myKey[3] == '3'):
if myKey[3] == '1':
values.append([My_dict[myKey]])
else:
values[-1].append(My_dict[myKey])
由于 3 个元素属于同一类别,您可以对字典的键进行排序并列出 3 个连续元素的值并将它们存储在结果字典中,就像这样......
from time import time
start = time()
Dict={'K0A1': 0.12, 'K1A1': 0.12, 'K2A1': 0.12, 'K3A1': 0.12, 'K0A2': 0.16, 'K1A2': 0.16, 'K2A2': 0.16, 'K3A2': 0.16, 'K0A3': 0.04, 'K1A3': 0.04, 'K2A3': 0.04, 'K3A3': 0.04, 'K0B1': 0.04, 'K1B1': 0.04, 'K2B1': 0.04, 'K3B1': 0.04, 'K0B2': 0.08, 'K1B2': 0.08, 'K2B2': 0.08, 'K3B2': 0.08, 'K0B3': 0.04, 'K1B3': 0.04, 'K2B3': 0.04, 'K3B3': 0.04, 'K0C1': 0.08, 'K1C1': 0.08, 'K2C1': 0.08, 'K3C1': 0.08, 'K0C2': 0.04, 'K1C2': 0.04, 'K2C2': 0.04, 'K3C2': 0.04, 'K0C3': 0.04, 'K1C3': 0.04, 'K2C3': 0.04, 'K3C3': 0.04, 'K0D1': 0.08, 'K1D1': 0.08, 'K2D1': 0.08, 'K3D1': 0.08, 'K0D2': 0.08, 'K1D2': 0.08, 'K2D2': 0.08, 'K3D2': 0.08, 'K0D3': 0.12, 'K1D3': 0.12, 'K2D3': 0.12, 'K3D3': 0.12}
sorted_keys = sorted(Dict)
res, ind = dict(), 0
while ind<len(Dict):
temp = []
for i in range(ind, ind+3):
temp.append(Dict[sorted_keys[i]])
else:
res[sorted_keys[i][:3]] = temp
ind += 3
print(res)
end = time()
print(f"\nTime Taken : {end-start}")
Output:-
{'K0A': [0.12, 0.16, 0.04], 'K0B': [0.04, 0.08, 0.04], 'K0C': [0.08, 0.04, 0.04], 'K0D': [0.08, 0.08, 0.12], 'K1A': [0.12, 0.16, 0.04], 'K1B': [0.04, 0.08, 0.04], 'K1C': [0.08, 0.04, 0.04], 'K1D': [0.08, 0.08, 0.12], 'K2A': [0.12, 0.16, 0.04], 'K2B': [0.04, 0.08, 0.04], 'K2C': [0.08, 0.04, 0.04], 'K2D': [0.08, 0.08, 0.12], 'K3A': [0.12, 0.16, 0.04], 'K3B': [0.04, 0.08, 0.04], 'K3C': [0.08, 0.04, 0.04], 'K3D': [0.08, 0.08, 0.12]}
Time Taken : 0.00011229515075683594
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.