我想循環播放字典中的所有內容[1:],但不知道如何操作並找不到答案。Python - 循環播放字典中的特定變量
for value in self.legLocs.itervalues():
print x
而且我認爲這會是這樣的
for value in self.legLocs.itervalues()[1:]:
print x
但是,這並不工作。什麼是正確的方法來做到這一點?
我想循環播放字典中的所有內容[1:],但不知道如何操作並找不到答案。Python - 循環播放字典中的特定變量
for value in self.legLocs.itervalues():
print x
而且我認爲這會是這樣的
for value in self.legLocs.itervalues()[1:]:
print x
但是,這並不工作。什麼是正確的方法來做到這一點?
詞典沒有順序,所以除了第一個(第一個元素沒有真正定義)之外,你不能真正遍歷它們。您可以遍歷所有的字典和排除儘管特定的鍵:
def dict_keys_without(d,excludes_set):
return (k for k in d if k not in excludes_set)
然後你可以使用:
for key in dict_keys_without(d,{'foo','bar'}):
#do something with `k` or `d[k]`, etc.
而且你可以很容易地修改上面的函數d.iteritems()
或d.itervalues()
或任何標準工作你要。
當然,總是有「使用collections.OrderedDict
」的建議,它是一個知道它的順序的字典子類。如果您使用的是OrderedDict
,那麼你可以這樣做:
values = iter(od.values())
_ = next(values,None) #scrap the first one
for value in values:
pass #Do something with the next values.
:
for k,v in self.legLocs.items():
print "key",k
print "value",v
或像這樣:
for kv in self.legLocs.items():
k, v = kv
print "key",k
print "value",v
如果您只想在密鑰上重複:
for k in self.legLocs.keys():
print "key",k
,如果你想只值迭代:
for v in self.legLocs.values():
print "value",v
由於@mgilson提到,[1:]
真的有一個dict
沒有意義......如果你快樂,只是忽略了一些任意的入口,那麼,可以使用類似:
def skipone(d):
i = d()
next(i, None)
return i
d = {1:2, 3:4, 5:6}
for blah in skipone(d.iteritems): # or other function
pass
或者:
from itertools import islice
def skip(obj, n=1):
i = obj() if callable(obj) else obj
return islice(i, n, None)
我想我會更有可能通過'iter'到'skipone'。在裏面,我確定我有一個使用'iter'內建的迭代器,我會返回構建的iter。例如「def skipone(可迭代):i = iter(可迭代);下(I,無);返回我'。然後由用戶來執行'skipone(d.iteritems())',但在我想的其他情況下,額外的呼叫是一個很小的代價,用於提高可用性。(但我喜歡這裏的想法+1) – mgilson 2013-04-08 15:54:08
@mgilson更新爲不需要'iter'或'next',採用任意迭代,但與現在一樣保持與閱讀的兼容......(IMHO讀取的內容相當不錯。 ) – 2013-04-08 16:03:53
是的,那也不算太壞。我喜歡。起初,我認爲「可調用」已被棄用,但似乎他們認爲這是一個糟糕的主意,並且在python3.0和3.1中將其刪除之後未反悔。 – mgilson 2013-04-08 16:06:21
以「迭代」,通過一本字典,這樣做:
for key in aDict.keys():
if key != 'excluded': # You can check to see if it is the one you want to leave off
print(aDict[key])
可能最好使用'下一個(值,無)'所以它不會對空類型的字典 – 2013-04-08 15:53:05
@JonClements突破 - 好一點。更新。 – mgilson 2013-04-08 15:55:53
如果您需要訂購字典,您可以使用[collections.OrderedDict](http://docs.python.org/2/library/collections.html#collections.OrderedDict) – 2013-04-08 16:00:07