代碼,我想搜索一個在d,代碼返回正確的結果低於大塊,即3 但是,我怎麼能寫出下面的代碼放到發生器體現在哪裏?改善與發電機表達
a = [4, 6]
d= {0: [0, 4], 1: [3, 6], 2: [4, 0], 3: [4, 6], 4: [6, 3], 5: [6, 4]}
for i in range(0, len(d)):
if d.get(i) == a:
print i
代碼,我想搜索一個在d,代碼返回正確的結果低於大塊,即3 但是,我怎麼能寫出下面的代碼放到發生器體現在哪裏?改善與發電機表達
a = [4, 6]
d= {0: [0, 4], 1: [3, 6], 2: [4, 0], 3: [4, 6], 4: [6, 3], 5: [6, 4]}
for i in range(0, len(d)):
if d.get(i) == a:
print i
迭代通過項目:
>>> list(d.iteritems())
[(0, [0, 4]), (1, [3, 6]), (2, [4, 0]), (3, [4, 6]), (4, [6, 3]), (5, [6, 4])]
如果你使用Python 3個工作,items()
是:
>>> a = [4, 6]
>>> for k, v in d.iteritems():
... if v == a:
... print k
...
3
d.iteritems()
與他們的鍵和值的字典返回每個項目的生成與iteritems相同。
你不需要範圍。
>>> a = [4, 6]
>>> d = {0: [0, 4], 1: [3, 6], 2: [4, 0], 3: [4, 6], 4: [6, 3], 5: [6, 4]}
>>> [i for i in d if d[i] == a]
[3]
>>> (i for i in d if d[i] == a)
<generator object <genexpr> at 0x7f14d9629690>
>>> next(_)
3
隨着next()
:
next(k for k, v in d.iteritems() if v == a)
next()
將返回第一個產生的結果。
這有利於在Python2和Python3中工作 –
爲什麼'd.get'如果你知道密鑰已經在那裏? – Blender
如果您提供不正確,無效或者不存在的密鑰,則d.get()具有返回'None'的好處。或者,如果嘗試使用'd [key]',則冒着拋出'KeyError'的風險;這是IMO的良好做法。 –