2014-03-24 35 views
0

我有下面這段代碼的價值,我想打印combo[values]在組合中等於numb[i]打印字典的值時,其關鍵是等於列表元素

numb = [5, 7, 49, 11, 13]  
combo = {45 : (-1002,-1023), 49 : (-9999,-2347), 20 : (-1979, -1576), 13 : (-6000,-3450), 110  : (-2139, -8800), 7 : (-6754,-9087) } 

任何combo[keys]我該怎麼做,請嗎?

+1

@DavidRobinson:並非''numb'中的所有值都出現在'combo'中。 –

+0

@MartijnPieters:啊,錯過了 –

回答

4

你是指通過numb循環並打印任何鍵如果存在?

兩個選項;有一個循環:再次

for key in combo.viewkeys() & numb: 
    print combo[key] 

的列表理解太:

for key in numb: 
    if key in combo: 
     print combo[key] 

可太表示爲一個列表理解,產生一個列表:

[combo[key] for key in numb if key in combo] 

或用dictionary views

[combo[key] for key in combo.viewkeys() & numb] 

演示:

>>> numb = [5, 7, 49, 11, 13]  
>>> combo = {45 : (-1002,-1023), 49 : (-9999,-2347), 20 : (-1979, -1576), 13 : (-6000,-3450), 110  : (-2139, -8800), 7 : (-6754,-9087) } 
>>> [combo[key] for key in numb if key in combo] 
[(-6754, -9087), (-9999, -2347), (-6000, -3450)] 
>>> [combo[key] for key in combo.viewkeys() & numb] 
[(-9999, -2347), (-6000, -3450), (-6754, -9087)] 

你採取什麼樣的路線取決於combonumb大小,以及是否numb可能是set爲好。如果numb可能是一個集合,則dict.viewkeys()可以通過使用兩者中較小的一個來優化相交操作,並且很可能是更快的選項,尤其是對於較大的數據集。

+0

我想你的意思是,如果組合鍵和組合[鍵] –

+0

@丹尼斯威廉姆森:我做了,已經糾正。謝謝! –

+0

@Martijn:謝謝,它工作! – Nobi

1

這可以用一個簡單的列表理解來完成:

>>> [v for k, v in combo.items() if k in numb] 
[(-6754, -9087), (-6000, -3450), (-9999, -2347)] 

我認爲這是你的意思?

+1

-0。 '麻木'k進行線性搜索。當與for循環結合時,這將最終在四倍時間執行。 OP沒有要求執行最好的代碼,但是這裏看起來很浪費,因爲有更好的替代方案,它們也是清晰簡明的。 –

相關問題