2012-03-06 24 views
1

我有一個字典打印時如何跳過一個值,它是不是在字典

x={'a':[1,'inr','in-gaap'],'b':[2,'','in-gaap'],'c':[3,'inr','']} 

從我印像這樣:

for key,values in x.iteritems(): 
    print 'value:{0}ref:{1}pre:{2}'.format(x[key][0],x[key][1],x[key][2]) 

它打印

value:1 ref:inr pre:in-gaap 
value:2 ref: pre:in-gaap 
value:3 ref:inr pre: 

但我想在輸出

value:1 ref:inr pre:in-gaap 
value:2 pre:in-gaap 
value:3 ref:inr 

對於不是那裏,值不應該被打印的值。 我該怎麼做?

+2

您應該使用'values'而不是'x [key]'。這就是爲什麼你迭代的項目......真的,你應該只是爲'x.itervalues()'中的值做'。 – 2012-03-06 11:31:11

+0

這並不是說不是在字典的價值,這是列表中的一個空字符串。這與字典無關。 – 2012-03-06 12:28:30

+0

感謝@ ChrisMorgan – user1182090 2012-03-06 12:41:50

回答

4
NAMES = 'value ref pre'.split() 
for key, values in x.iteritems(): 
    valstrs = ['%s:%s' % (name, value) 
       for name, value in zip(NAMES, values) 
       if value] 
    print ' '.join(valstrs) 
+0

我會採取'NAMES = '值', 'REF', 'pre''超過'NAMES =' 值ref pre'.split()'任何一天。 (我會把我扔下了'valstrs'位,把它傳遞給發電機表達式'」」。加入()') – 2012-03-06 13:12:44

+0

這是品味問題,真的。我發現使用空間比使用'',''作爲令牌分隔符要快得多。如果'NAMES'是模塊級的,那麼在性能方面沒有任何差別。 'valstrs'是爲了便於閱讀 - 3元素列表的性能與生成器表達式大致相同。 – DzinX 2012-03-06 16:00:10

相關問題