Python 使用生成器表达式改进代码

Python 使用生成器表达式改进代码,python,python-2.7,Python,Python 2.7,我想在d中搜索a,下面的代码块返回正确的结果,即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 你不需要射程 >>> a = [4, 6] >>> d = {0: [0,

我想在d中搜索a,下面的代码块返回正确的结果,即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
你不需要射程

>>> 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
>a=[4,6]
>>>d={0:[0,4],1:[3,6],2:[4,0],3:[4,6],4:[6,3],5:[6,4]}
>>>[i表示d中的i,如果d[i]==a]
[3]
>>>(如果d[i]==a,则i代表d中的i)
>>>下一个
3.
您不需要范围

>>> 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
>a=[4,6]
>>>d={0:[0,4],1:[3,6],2:[4,0],3:[4,6],4:[6,3],5:[6,4]}
>>>[i表示d中的i,如果d[i]==a]
[3]
>>>(如果d[i]==a,则i代表d中的i)
>>>下一个
3.
next()

next()
将返回第一个生成的结果。

使用
next()


next()
将返回第一个生成的结果。

遍历以下项目:

>>> a = [4, 6]
>>> for k, v in d.iteritems():
...     if v == a:
...             print k
... 
3
d.iteritems()
返回字典中每个项的生成器及其键和值:

>>> list(d.iteritems())
[(0, [0, 4]), (1, [3, 6]), (2, [4, 0]), (3, [4, 6]), (4, [6, 3]), (5, [6, 4])]

如果您使用的是python 3,
items()
与iteritems完全相同。

迭代这些项:

>>> a = [4, 6]
>>> for k, v in d.iteritems():
...     if v == a:
...             print k
... 
3
d.iteritems()
返回字典中每个项的生成器及其键和值:

>>> list(d.iteritems())
[(0, [0, 4]), (1, [3, 6]), (2, [4, 0]), (3, [4, 6]), (4, [6, 3]), (5, [6, 4])]

如果您使用的是python 3,
items()
与iteritems完全相同。

d.get()的好处是,如果您提供了不正确、无效或不存在的密钥,则返回
None
。或者,如果您尝试
d[key]
,则可能会抛出
keyrerror
;这是一个很好的实践。d.get()来自OP的代码。我更新了代码。谢谢你的评论。哈,现在我很困惑。。。让d.get()=P有什么不对,我知道它仍然有效,而且是有条件的,但是有什么害处吗?@JustinCarroll,迭代字典的键,
d[key]
不会引发keyrerror。如果您提供的键不正确、无效或不存在,d.get()可以返回
None
。或者,如果您尝试
d[key]
,则可能会抛出
keyrerror
;这是一个很好的实践。d.get()来自OP的代码。我更新了代码。谢谢你的评论。哈,现在我很困惑。。。让d.get()=P有什么不对,我看到它仍然有效,而且是有条件的,但是有什么害处吗?@JustinCarroll,迭代字典的键,
d[key]
将不会引发KeyError。