如何循环遍历字典值并获取两个数字之间的所有数字



我有一个存储机器学习预测概率的字典。字典的关键字是预测实例的索引,值是包含类概率的列表。我想创建一个新的字典来存储两个数字(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)

相关内容

  • 没有找到相关文章

最新更新