代码,我想搜索一个在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的良好做法。 –