2013-12-12 166 views
0

大家好。我正在爲我的CS決賽進行學習,並且在那裏有字典。我很瞭解字典,但這一個讓我難住。我將如何去解決這樣一個問題?基於值打印字典鍵

鑑於下面的字典,請繼續編寫代碼(舊樣式,不需要功能),該代碼將生成值爲1到100(含)的所有鍵的列表。不要爲給定的字典硬編碼你的程序。

D = {1:1000, 2:2000, 3:3000, 1111:10, 2222:20, 3333:30} 

是的,這是一個實際評價的問題,但這不是功課。

我在想,我應該做一個for循環通過字典,但這不會幫助,因爲dict存儲key:value,我真的需要比較value只。

任何感謝!

+0

但是,你又需要鑰匙,因爲你想收集它們在列表中 - 所以問題在哪裏?只需迭代字典(提示:使用'D.items()'(Python 3)),檢查每個值,並將該值添加到列表中,如果該值在該範圍內。 –

+0

你可以過濾dict.items(),一個列表(或3.x中的視圖)鍵值對 – alko

+0

在python2中,使用dict.iteritems()可能會更好。 – smeso

回答

3
[k for k, v in D.items() if 1 <= v <= 100] 
+0

謝謝!這是完全正確的。 – user2840144

1

如何如下:

>>> D = {1:1000, 2:2000, 3:3000, 1111:10, 2222:20, 3333:30} 
>>> [key for key in D if 1 <= D[key] <= 100] 
[3333, 2222, 1111] 
+1

不,不是鑰匙,值應該在那個範圍內...... –

+0

@TimPietzcker對不起,感謝您發現它,我在前一個控制檯日誌中的遊戲,而不是我實際上想要發佈的遊戲! :P –

+0

ahhh是的,這太棒了! – user2840144

1

我想我真正理解了它!

我沒有使用理解,因爲我的教授從未因任何原因而忽略它。

d ={1:1000, 2:2000, 3:3000, 1111:10, 2222:20, 3333:30} 

for key in d: 
    if d[key] >=1 and d[key] <=100: 
     print(key) 
    else: 
     pass 
+0

這是最簡單的,但解析速度更快。 –

+0

絕對。有什麼複雜的理解,我需要知道之前做?我的教授從來沒有超過它,但我一直在堆棧中看到它,似乎好得多 – user2840144

+0

不,沒有什麼複雜的。由於它們在本地語言代碼中的實現,它們更快。你只需要按照正常的方式編寫'for'循環。您還可以添加多個'if-else'語句。它們非常方便,因爲你可以寫一行。太酷了! :) –