2012-05-04 83 views
1

我有一本詞典,我想遍歷鍵,測試鍵,然後打印通過測試的鍵。Python的詞典幫助

例如,我的代碼看起來像這樣的時刻:

x = {4:"a", 1:"b", 0:"c", 9:"d"} 
for t in x: 
    if t > 2: 
     print t 

然而,所有的輸出,只是關鍵。

如何獲取打印出代碼末尾的值而不是密鑰的代碼?

另外,如何以字典形式獲得此文件,{key : value}

回答

1
x = {4:"a", 1:"b", 0:"c", 9:"d"} 
for t in x: 
    if t > 2: 
     print '{}: {}'.format(t, x[t]) 

稍微更Python:

>>> for key, value in x.iteritems(): 
... if key > 2: 
...  print '{}: {}'.format(key, value) 
... 
4: a 
9: d 

編輯:要只打印值:

>>> for key, value in x.iteritems(): 
... if key > 2: 
...  print value 
... 
a 
d 
+0

如果我只是想要它打印出價值?比如,這只是這一對中的最後一個詞?超過你! – Hoops

+0

好吧,看我的編輯 – wim

5

你可以試試這個:print t, x[t]

或者這樣:

for key, val in x.items(): 
    if key > 2: 
     print key, val 

如果你想只有你打印到一個新的字典中的對,那麼你必須把它們放在那裏:

newdict = {} 
for key, val in x.items(): 
    if key > 2: 
     print key, val 
     # put all the keys > 2 into the new dict 
     newdict[key] = val 

當然這種解決方案插入時正在打印。如果你正在做的不僅僅是一個小腳本越多,你會得到更多的實用工具是一個打破的功能出來,確保任何特定的功能是一個,也只有一個,事情:

def filter_dict(x): 
    newdict = {} 
    for key, val in x.items(): 
     if key > 2: 
      # put all the keys > 2 into the new dict 
      newdict[key] = val 

def pretty_print(dct): 
    for k, v in dct.items(): 
     print k, v 

filtered = filter_dict(x) 

pretty_print(dct) 

這並不適用,如果當然,你只是在調試,而且有些方法取決於你編寫的程序有多大:如果你做的是足夠簡單的事情,那麼通過打破功能而獲得的額外靈活性就會丟失,因爲額外的精力來確定任何給定的事情。這就是說:你通常應該這樣做。

此外,爲了對在Python一個簡單的比較過濾列表的最慣用的方法是使用一個dict comprehension(新的Python 2.7/3.0):

filtered = {key: val for key, val in x if key > 2} 
+1

多數民衆贊成在brillaint!謝謝! – Hoops

+2

SO感謝的方式是投票和/或接受:-)也歡迎你。 – quodlibetor

0

將該溶液打印鍵t,並在值字典x在密鑰t

x = {4:"a", 1:"b", 0:"c", 9:"d"} 
for t in x: 
    if t > 2: 
     print t, x[t] 
2
print [(k,v) for k,v in yourDict.items() if test(k)] 

(你可以只是做k for k,v in...v for k,v in...。如果你只需要值,你可以使用yourDict.values())。

1

如果key> 2以下列表理解將打印鍵和值。

試試這個:

print [(key, value) for key, value in x.iteritems() if key > 2] 
1

只需按鍵:

>>> [k for k in x.iterkeys() if k > 2] 
[4, 9] 

就值:

>>> [v for k,v in x.iteritems() if k > 2] 
['a', 'd'] 

鍵 - 值對:

>>> [(k, v) for k,v in x.iteritems() if k > 2] 
[(4, 'a'), (9, 'd')] 

作爲dict

>>> dict((k,v) for k,v in x.iteritems() if k > 2) 
{9: 'd', 4: 'a'} 
1

鍵以及值:

x = {4:"a", 1:"b", 0:"c", 9:"d"} 
for k,v in x.items(): 
    if k>2: print"{%d : %s}"%(k,repr(v)) 

{4 : 'a'} 
{9 : 'd'} 

只值:

x = {4:"a", 1:"b", 0:"c", 9:"d"} 
for k,v in x.items(): 
    if k>2:print v 

a 
d 
1

如果你想創建一個子集字典項目,你也可以用字典理解爲Python 2.7+:

>>> x = {4:"a", 1:"b", 0:"c", 9:"d"} 
>>> y = {k:v for k, v in x.iteritems() if k > 2} 
>>> y 
{9: 'd', 4: 'a'} 

這僅僅是隻有輕微的語法差異較新的等價什麼Johnysweb shows in his answer

>>> y = dict((k, v) for k, v in x.iteritems() if k > 2) 
>>> y 
{9: 'd', 4: 'a'}  
+0

或甚至只是'{k:x [k] for k in x if k> 2}'這可能是最乾淨的(假設Python 2.7+) – Duncan

0

使用lambda功能

(lambda x:[(k,v) for k,v in x.iteritems() if k > 2])(x)