2016-09-22 24 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