2012-03-06 3 views
1

У меня есть Dictпри печати как пропустить значение, которое не находится в Словаре

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 ​​()'. –

+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 =' значение ref pre'.split() 'в любой день. (И я бы отбросил бит 'valstrs', поставив его как выражение генератора, переданное в'. '.join() '.) –

+0

На самом деле это вопрос вкуса. Мне гораздо проще использовать пространство, а не '', ''как разделитель токенов. Если 'NAMES' является модульным уровнем, он не имеет разницы в производительности. 'valstrs' предназначены для чтения - производительность для 3-элементных списков будет примерно такой же, как для выражений генератора. – DzinX

Смежные вопросы