2013-12-12 110 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'语句。它们非常方便,因为你可以写一行。太酷了! :) –