2013-04-08 39 views
0

我想循环播放字典中的所有内容[1:],但不知道如何操作并找不到答案。Python - 循环播放字典中的特定变量

for value in self.legLocs.itervalues(): 
      print x 

而且我认为这会是这样的

for value in self.legLocs.itervalues()[1:]: 
      print x 

但是,这并不工作。什么是正确的方法来做到这一点?

回答

2

词典没有顺序,所以除了第一个(第一个元素没有真正定义)之外,你不能真正遍历它们。您可以遍历所有的字典和排除尽管特定的键:

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. 
+0

可能最好使用'下一个(值,无)'所以它不会对空类型的字典 – 2013-04-08 15:53:05

+0

@JonClements突破 - 好一点。更新。 – mgilson 2013-04-08 15:55:53

+0

如果您需要订购字典,您可以使用[collections.OrderedDict](http://docs.python.org/2/library/collections.html#collections.OrderedDict) – 2013-04-08 16:00:07

0
如果要遍历所有项目

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 
1

由于@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) 
+1

我想我会更有可能通过'iter'到'skipone'。在里面,我确定我有一个使用'iter'内建的迭代器,我会返回构建的iter。例如“def skipone(可迭代):i = iter(可迭代);下(I,无);返回我'。然后由用户来执行'skipone(d.iteritems())',但在我想的其他情况下,额外的呼叫是一个很小的代价,用于提高可用性。(但我喜欢这里的想法+1) – mgilson 2013-04-08 15:54:08

+0

@mgilson更新为不需要'iter'或'next',采用任意迭代,但与现在一样保持与阅读的兼容......(IMHO读取的内容相当不错。 ) – 2013-04-08 16:03:53

+0

是的,那也不算太坏。我喜欢。起初,我认为“可调用”已被弃用,但似乎他们认为这是一个糟糕的主意,并且在python3.0和3.1中将其删除之后未反悔。 – mgilson 2013-04-08 16:06:21

0

以“迭代”,通过一本字典,这样做:

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])