2015-10-25 90 views
-3

我的字典裏是這樣的:如何檢查python字典值中的任何數組中是否存在值?

A = { 
    (0,0): [(0, 0), (1, 2), (3, 2)], 
    (1,1): [(2, 0)], 
    (10,1): [(0, 0), (2, 1)] 
} 

給定一個新的記錄,我如何檢查是否是元組(x0, y0)在任何字典中值的數組的存在嗎?

我想從列表

for i, v in iteritems(A): 
    if (x0, y0) in v: 
     return True 

有沒有一種方法,使這項的一個在線解決方案迭代?

+0

你如何定義現有的陣列中的一個元組? – juanchopanza

回答

2

使用any() function,把你圈在發電機的表達:

return any((x0, y0) in v for v in A.itervalues()) 

any()功能推進發電機一步一個時間,並在(x0, y0) in v測試返回true時立即返回True(提前退出)。這意味着只有最小工作量已完成。

演示:

>>> A = { 
...  (0,0): [(0, 0), (1, 2), (3, 2)], 
...  (1,1): [(2, 0)], 
...  (10,1): [(0, 0), (2, 1)] 
... } 
>>> x0, y0 = 2, 0 
>>> any((x0, y0) in v for v in A.itervalues()) 
True 
>>> x0, y0 = 2, 42 
>>> any((x0, y0) in v for v in A.itervalues()) 
False 
0

你可以做類似如下:

value = (2, 1) 

found = False 
for vl in A.values(): 
    if value in vl: 
     found = True 
     break 

print found 
+0

這不是一條線。 OP代碼只是返回而不是使用'break'。 –

+0

@MartijnPieters,這在OP改變了他的要求之前得到了回答。 –

+0

對,我錯過了他們編輯他們的要求。不過,您可能想要更新您的帖子以符合他們。 –

相關問題