0

辞書 [1:] のすべてをループしようとしていますが、その方法がわからず、答えが見つかりません。

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

そして、私はそれが次のようなものになると思います

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

しかし、それはうまくいきません。これを行う正しい方法は何ですか?

4

4 に答える 4

2

辞書には順序がないため、最初の要素を除いてすべてを実際にループすることはできません (最初の要素が実際には定義されていないため)。ただし、dict をループして特定のキーを除外することはできます。

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.
于 2013-04-08T15:45:55.370 に答える
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)
于 2013-04-08T15:51:53.600 に答える
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
于 2013-04-08T15:47:42.433 に答える