我遇到了以下问题,我的代码如下。基本上我有一个具有id和相应权重的对象列表,我有另一个id列表。我想只使用与第二个列表中的id匹配的对象的权重。
d_weights = [{'d_id':'foo', 'weight': -0.7427}, ...]
d_ids = ['foo', ...]
for dtc_id in d_ids:
d_weight = next((d['weight'] for d in d_weights if d['d_id'] == dtc_id), "")
print str(d_weight)
if str(d_weight) != "":
print "not empty string! "+str(d_weight)
这个输出是:
-0.7427
0.0789
-0.0039
-0.2436
-0.0417
not empty string! -0.0417
为什么只有最后一个不能为空我才能打印出来并且它们显然不等于空字符串?在使用之前,我如何检查next()
实际返回的内容?
答案 0 :(得分:1)
你没有正确的算法。
所以d_weight = next((d['weight'] for d in d_weights if d['d_id'] == dtc_id), "")
只迭代一次。
在每个周期for weight_dict in d_weights:
,你只有d_weights
的第一个词。
如果没有更多数据,我无法重现您的输出。 在我的情况下,它工作正常:
-0.7427
not empty string! -0.7427
-0.327
not empty string! -0.327
您可以在DhiaTN的答案中找到正确的代码。
答案 1 :(得分:0)
只需迭代键列表并从每个字典中获取值:
lm