2012-03-13 56 views
0

跳過空白值有一個字典:我怎麼可以在字典

x = {'a': {'p': 'in-gaap', 'r': 'inr', 'dec': 0}, 
    'b': {'p': 'in-ca', 'r': 'inr', 'dec': 0}, 
    'c': {'p': 'in-gaap', 'r': '', 'dec': ''}, 
    'd': {'p': 'in-gaap', 'r': 'inr', 'dec': 0}} 

我使用此代碼跳過空白值:

for k,v in x.iteritems(): 
    if d[k]['r'] == '' and d[k]['dec'] == '': 
     print k, x[k]['p'] 
    else:     
     print x[k]['p'], x[k]['r'], x[k]['dec'] 

但輸出是:

a,in-gaap 
b,in-ca 
c-in-gaap 
d-in-gaap 

它沒有正確執行條件,它正在打印所有值

而且我也試過用這個代碼

for k,v in x.iteritems(): 
    obj = re.match('\w+', x[k]['p']) 
    obj1 = re.match('\w+', x[k]['q']) 
    if not obj1 and obj2: 
     print k, x[k]['p'] 
    else:     
     print x[k]['p'], x[k]['r'], x[k]['dec'] 

但是輸出和上面一樣。

實際上,dict的空白值包含"\n",''等等和一些非ASCII字符,所以我嘗試使用re,但它不能正確執行。

+2

9問題和無法使用的格式? [編輯幫助](http://stackoverflow.com/editing-help) – stema 2012-03-13 09:24:38

+0

看看它看起來有多棒!謝謝@Rik Poggi – stema 2012-03-13 09:27:16

+3

您的預期輸出是什麼? – wim 2012-03-13 09:31:11

回答

4

在你的第一個代碼中,你指的是一個名爲d的字典,我們不知道它是什麼。如果我是你字典重命名爲d,而不是x,我得到這樣的輸出:

>>> ## working on region in file /usr/tmp/python-30572oWE... 
in-gaap inr 0 
c in-gaap 
in-ca inr 0 
in-gaap inr 0 

這似乎是你在找什麼。

0

不知道這是否是你想要什麼:

for k,v in x.iteritems(): 
    if not v['r'] and not v['dec']: 
     print k,v['p'] 
    else: 
     print v['p'],v['r'],v['dec'] 

輸出:

in-gaap inr 0 
c in-gaap 
in-ca inr 0 
in-gaap inr 0 
+0

小心.. v ['dec']似乎採用兩種不同類型的falsey值(int 0和空字符串) – wim 2012-03-13 09:34:42