我有一个存储机器学习预测概率的字典。字典的关键字是预测实例的索引,值是包含类概率的列表。我想创建一个新的字典来存储两个数字(0.48和0.55)之间的所有类概率。使用下面的代码,我没有得到预期的结果,因为我的for循环似乎没有迭代字典的所有值。
d={348: [0,0,0,0.5,0,0,0.49], 349: [0,0,0.3,0.48,0.49,0.55,0.9], 350:
[0,0,0.3,0.45,0.0,0.52,0.8]}
dt={}
for i in d:
for index, value in enumerate(d[i]):
if value >= 0.45 and value <= 0.55:
dt={i: {(str(index + 1)): [value]} }
print(dt)
我的输出现在只有:
{350: {'6': 0.52}}.
然而,我想从0.48到0.55之间的所有值列表中获得所有数字,并获得与所选数字相关的键以及值列表中数字的索引。我想要的输出如下:
{348: {'4': 0.5, '7': 0,49}, 349: {'4': 0.48, '5': 0.49, '6', 0.55}, 350: {'4': 0.45,
'6': 0.52}
您可以使用dict理解:
d = {
348: [0, 0, 0, 0.5, 0, 0, 0.49],
349: [0, 0, 0.3, 0.48, 0.49, 0.55, 0.9],
350: [0, 0, 0.3, 0.45, 0.0, 0.52, 0.8],
}
out = {
k: {str(i): x for i, x in enumerate(v, 1) if 0.45 <= x <= 0.55}
for k, v in d.items()
}
print(out)
打印:
{
348: {"4": 0.5, "7": 0.49},
349: {"4": 0.48, "5": 0.49, "6": 0.55},
350: {"4": 0.45, "6": 0.52},
}
dt = {}
for i, l in d.items():
dt[i] = {str(j+1):value for j, value in enumerate(l) if value >= 0.45 and value <= 0.55}
你做错的是每个循环都在创建dt。
-
首先,每次找到了匹配的值,这就是为什么结果只是一个具有一键的字典
-
第二,与其使用
for i in d
,为什么不使用.items()
呢您将同时使用词典
试试这个代码:
d = {348: [0, 0, 0, 0.5, 0, 0, 0.49], 349: [0, 0, 0.3, 0.48, 0.49, 0.55, 0.9],
350: [0, 0, 0.3, 0.45, 0.0, 0.52, 0.8]}
dt = {}
for key, value in d.items():
dt[key] = {}
for index, v in enumerate(value):
if 0.45 <= v <= 0.55:
dt[key][str(index + 1)] = v
print(dt)