我有一本詞典,我想遍歷鍵,測試鍵,然後打印通過測試的鍵。Python的詞典幫助
例如,我的代碼看起來像這樣的時刻:
x = {4:"a", 1:"b", 0:"c", 9:"d"}
for t in x:
if t > 2:
print t
然而,所有的輸出,只是關鍵。
如何獲取打印出代碼末尾的值而不是密鑰的代碼?
另外,如何以字典形式獲得此文件,{key : value}
?
我有一本詞典,我想遍歷鍵,測試鍵,然後打印通過測試的鍵。Python的詞典幫助
例如,我的代碼看起來像這樣的時刻:
x = {4:"a", 1:"b", 0:"c", 9:"d"}
for t in x:
if t > 2:
print t
然而,所有的輸出,只是關鍵。
如何獲取打印出代碼末尾的值而不是密鑰的代碼?
另外,如何以字典形式獲得此文件,{key : value}
?
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
你可以試試這個: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}
多數民衆贊成在brillaint!謝謝! – Hoops
SO感謝的方式是投票和/或接受:-)也歡迎你。 – quodlibetor
將該溶液打印鍵t
,並在值字典x
在密鑰t
。
x = {4:"a", 1:"b", 0:"c", 9:"d"}
for t in x:
if t > 2:
print t, x[t]
print [(k,v) for k,v in yourDict.items() if test(k)]
(你可以只是做k for k,v in...
或v for k,v in...
。如果你只需要值,你可以使用yourDict.values()
)。
如果key> 2以下列表理解將打印鍵和值。
試試這個:
print [(key, value) for key, value in x.iteritems() if key > 2]
只需按鍵:
>>> [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'}
鍵以及值:
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
如果你想創建一個子集字典項目,你也可以用字典理解爲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'}
或甚至只是'{k:x [k] for k in x if k> 2}'這可能是最乾淨的(假設Python 2.7+) – Duncan
使用lambda功能
(lambda x:[(k,v) for k,v in x.iteritems() if k > 2])(x)
如果我只是想要它打印出價值?比如,這只是這一對中的最後一個詞?超過你! – Hoops
好吧,看我的編輯 – wim