辞書

2012-03-06 11 views
1

ではない値をスキップする方法を印刷している間、私は私はこのように印刷しています辞書

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

そこからのdictあります

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

あなたは 'x [key]'の代わりに 'values'を使うべきです。そういうわけで、あなたはアイテムを繰り返し処理しています...本当に、x.itervalues()内の値に対して ''やっているだけです。 –

+0

これはdictにない値ではなく、リスト内の空の文字列です。これは辞書とは関係ありません。 –

+0

ありがとう@ ChrisMorgan – user1182090

答えて

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 =' value ref pre'.split() 'の任意の日に取っています。 (そして私は 'valstrs'ビットを' ''join()'に渡されるジェネレータ式として置いておきます) –

+0

それは本当に味の問題です。トークンセパレータとして ''、 ''を使うのではなく、スペースを使うほうがはるかに早いことがわかります。 'NAMES'がモジュールレベルであれば、パフォーマンス上の違いはありません。 'valstrs'は読みやすくするためのものです.3要素リストのパフォーマンスは、ジェネレータ式の場合とほぼ同じです。 – DzinX