2011-12-25 242 views
-1

搜索列表的更好方法?任何建議表示讚賞:Python列表搜索

for key in nodelist.keys(): 
    if len(nodelist[key]) > 0: 
     if key == "sample_node": 
      print key + ":" 
      print nodelist[key] 
+5

你到底想幹什麼?用英文描述。準確**。如果您認爲這將有所幫助,請舉例說明預期的投入和產出。 – 2011-12-25 04:46:11

+0

這不是「搜索」。這是一個「過濾器」。此外,'nodeList'不可能是一個列表,它必須是一個字典,這是有道理的。 – 2011-12-25 16:44:37

回答

2
key = "sample_node" 
if key in nodelist: 
    print ''.join([key, ":", nodelist[key]]) 
+0

'if len()> 0'部分缺失... – EOL 2011-12-25 04:48:15

+1

我把它當作他的天真方法來處理「如果字典中的這個項目被設置了」。 – Interrobang 2011-12-25 04:49:26

+2

問題中的測試意味着「如果該值具有非零長度」,取而代之。例如,'nodelist = {「sample_node」:[]}'在原始問題中不會打印任何內容,但會在答案中打印出某些內容。 – EOL 2011-12-25 04:53:17

4

這是簡單的寫這個代碼:

key = "sample_node" 
if key in nodelist: # loop not needed, and .keys() not needed 
    value = nodelist[key] 
    if value: # len() not needed 
     print key + ":" 
     print value 
+0

...和downvote的原因是...? – EOL 2011-12-25 04:53:47

+0

您可能想要修復您的代碼格式。 (在第一行有一個從未關閉的報價。) – FakeRainBrigand 2011-12-25 04:56:52

+2

@FakeRainBrigand嘿人,只是編輯它不使用downvote;) – Efazati 2011-12-25 05:03:35

1

試試這個:

[k+':'+str(v) for k,v in nodelist.items() if k == 'sample_node' and v] 

如果你只需要打印結果:

for s in (k+':'+str(v) for k,v in nodelist.items() if k == 'sample_node' and v): 
    print s 
+0

加一行爲;) – Efazati 2011-12-25 04:58:11

+2

如果你認爲'nodelist'是一個字典(通過使用'.items()'),那麼你不需要for-loop:['k ='sample_node'; v = nodelist.get(k);如果v:print「%s:\ n%s」%(k,v)'](http://stackoverflow.com/a/8628297/4279) – jfs 2011-12-25 05:17:28

2

如果nodelist類型是dict

>>> key = 'sample_node' 
>>> if nodelist.get(key): 
...  print key+':'+str(nodelist[key]) 
1
filter(lambda x: nodeList[x], nodeList)