2015-12-22 71 views
0

我遇到了以下問題,下面是我的代碼。基本上我有一個ID和相應的權重對象的列表,我有另一個ID列表。我只想使用與第二個列表中的id匹配的對象的權重。Python字符串/浮點比較

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

看起來如果在['foo',..]]中的d ['d_id']中使用'for [d ['weight'] for d in d_weights,可能更容易循環:' –

+0

@appel Kindly爲'd_weights'和'd_ids'添加完整的數據集。 – anand

+0

我無法發佈d_weights和d_ids的完整數據集(方式太長),我給出了數據集的表示形式。我怎麼可能在if語句之前打印'd_weight',並且與空字符串的比較不計算True? – appel

回答

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的答案找到。

0

只是重複鍵的列表,並從各個字典獲取值:

for weight_dict in d_weights 
    for key in d_ids: 
     print weight_dict.get(key, "")