2016-09-22 23 views
-1

鍵的值,我有Python中的字典時我想打印出字典的值(或者其存儲在一個txt文件),它看起來像這樣打印只期望在dcitionary

{123: [u'6722000', u'6722001', u'6631999', u'PX522.X522.091003143054.S4J2', u'PXX22.XX22.140311131347.A6D4', u'7767815060', u'6631900', u'7767815062', u'18001029945', u'7767815063'],...} 

,我只想要在其中具有「P」的值而不是僅具有數字的值。

例如,上述字典應該像

{123: [u'PX522.X522.091003143054.S4J2', u'PXX22.XX22.140311131347.A6D4'],...} 

這是我寫

components = nx.connected_component_subgraphs(G) 

for idx, comp in enumerate(components): 
    if "P" in comp.nodes(): 
     comp_dict.update({idx: comp.nodes()}) 

的代碼,但它給了我無輸出。 如果我在沒有if語句的情況下執行代碼,我會得到與所有值相同的輸出。

+2

我沒有看到你在你顯示的字典上操作。這是一個與networkx相關的問題,如果我沒有弄錯,comp.nodes()會返回一個Graph對象列表,「P」永遠不會是這個項目的一個項目。 – proycon

+0

那麼我有沒有辦法在後期階段提取所有'P'值?我的意思是要求我可以對comp_dict執行任何操作並將包含'P'的所有值存儲到另一個字典中? – Anubhav

回答

0

代碼註釋在線:

a_dict = {123: [u'6722000', u'6722001', u'6631999', u'PX522.X522.091003143054.S4J2', u'PXX22.XX22.140311131347.A6D4', u'7767815060', u'6631900', u'7767815062', u'18001029945', u'7767815063'], 
       456: [u'6722000', u'6722001', u'6631999', u'PX522.X522.091003143054.S4J2']} 
    print "Before...",a_dict 
    #Iterate over keys of dictonary 
    for k in a_dict.keys(): 
     #Check the values in list for 'P'. Keep only which has 'P' 
     tmp_list = [i for i in a_dict[k] if "P" in i] 
     #Update dictionary with new list 
     a_dict[k]=tmp_list 
     tmp_list = [] 
    print "After...", a_dict 

輸出:

C:\Users\dinesh_pundkar\Desktop>python c.py 
Before... {456: [u'6722000', u'6722001', u'6631999', u'PX522.X522.091003143054.S 
4J2'], 123: [u'6722000', u'6722001', u'6631999', u'PX522.X522.091003143054.S4J2' 
, u'PXX22.XX22.140311131347.A6D4', u'7767815060', u'6631900', u'7767815062', u'1 
8001029945', u'7767815063']} 
After... {456: [u'PX522.X522.091003143054.S4J2'], 123: [u'PX522.X522.09100314305 
4.S4J2', u'PXX22.XX22.140311131347.A6D4']} 

C:\Users\dinesh_pundkar\Desktop> 

請讓我知道如果你有查詢。

+0

謝謝@Dinesh。您的代碼爲我提供了我想要的解決方案。 還有一件事。現在,我使用兩個for循環而不是一個來獲得我想要的輸出。 由於時間複雜性對我來說最重要,是否有可能以我的循環內部實現您的邏輯? – Anubhav

+0

你能分享你上面提到的代碼嗎?沒有看到,無法評論。 –

+0

'comp_dict = {idx:comp.nodes()for idx,comp in enumerate(components)}' 'print comp_dict' 它與我的問題中的for循環執行相同的任務(除了過濾掉所有顯然,「P」值不能提前工作)。 – Anubhav

0

enumerate會給你迭代器的迭代器索引和值。在這種情況下,密鑰和索引的關鍵。不是一個鍵的值。由於該值是一個字符串列表,您必須在列表中的字符串中檢查「P」。試試這樣:

for idx, comp in components.items(): 
    for s in comp: 
     if "P" in s: 
      print(s) 
+0

謝謝你的回答。但在你的代碼中,我只是得到一個包含「P」的值列表,而我需要一個字典作爲輸出,與我的輸入格式相同。 – Anubhav