我有一本字典,我想迭代键,测试键,然后打印通过测试的键。
例如,我的代码目前看起来像这样:
x = {4:"a", 1:"b", 0:"c", 9:"d"}
for t in x:
if t > 2:
print t
但是,所有的输出都只是关键。
如何让代码打印出代码末尾的值而不是密钥?
另外,我如何以词典的形式{key : value}
?
答案 0 :(得分:5)
你可以试试这个:print t, x[t]
或者这个:
for key, val in x.items():
if key > 2:
print key, val
如果您只想将要打印的对子放入新词典中,那么您必须将它们放在那里:
newdict = {}
for key, val in x.items():
if key > 2:
print key, val
# put all the keys > 2 into the new dict
newdict[key] = val
当然,解决方案是在插入时进行打印。如果你做的不仅仅是一个小小的脚本,你将获得更多的功能,而不是破坏功能,确保任何给定的功能只做一个,只有一个:
def filter_dict(x):
newdict = {}
for key, val in x.items():
if key > 2:
# put all the keys > 2 into the new dict
newdict[key] = val
def pretty_print(dct):
for k, v in dct.items():
print k, v
filtered = filter_dict(x)
pretty_print(dct)
如果您只是在进行调试,这当然不适用,而且有些方法取决于您编写的程序有多大:如果您做的很简单,那么额外的灵活性你通过破坏功能而失去了,因为需要额外的努力来确定任何给定的东西。那说:你通常应该这样做。
此外,在Python中进行简单比较过滤列表的最惯用方法是使用dict comprehension(Python 2.7 / 3.0中的新增内容):
filtered = {key: val for key, val in x if key > 2}
答案 1 :(得分:2)
print [(k,v) for k,v in yourDict.items() if test(k)]
(您可以k for k,v in...
或v for k,v in...
。如果您只需要值,则可以使用yourDict.values()
。)
答案 2 :(得分:1)
x = {4:"a", 1:"b", 0:"c", 9:"d"}
for t in x:
if t > 2:
print '{}: {}'.format(t, x[t])
稍微多一点pythonic:
>>> for key, value in x.iteritems():
... if key > 2:
... print '{}: {}'.format(key, value)
...
4: a
9: d
编辑 只需打印值:
>>> for key, value in x.iteritems():
... if key > 2:
... print value
...
a
d
答案 3 :(得分:1)
如果键>以下列表理解将打印键和值。 2。
试试这个:
print [(key, value) for key, value in x.iteritems() if key > 2]
答案 4 :(得分:1)
只需按键:
>>> [k for k in x.iterkeys() if k > 2]
[4, 9]
只是值:
>>> [v for k,v in x.iteritems() if k > 2]
['a', 'd']
键值对:
>>> [(k, v) for k,v in x.iteritems() if k > 2]
[(4, 'a'), (9, 'd')]
作为dict
:
>>> dict((k,v) for k,v in x.iteritems() if k > 2)
{9: 'd', 4: 'a'}
答案 5 :(得分:1)
键和值:
x = {4:"a", 1:"b", 0:"c", 9:"d"}
for k,v in x.items():
if k>2: print"{%d : %s}"%(k,repr(v))
{4 : 'a'}
{9 : 'd'}
只是值:
x = {4:"a", 1:"b", 0:"c", 9:"d"}
for k,v in x.items():
if k>2:print v
a
d
答案 6 :(得分:1)
如果要创建包含项子集的字典,还可以使用字典理解进行Python 2.7 +:
>>> x = {4:"a", 1:"b", 0:"c", 9:"d"}
>>> y = {k:v for k, v in x.iteritems() if k > 2}
>>> y
{9: 'd', 4: 'a'}
这只是一个较新的等价物,只有较小的语法差异Johnysweb shows in his answer:
>>> y = dict((k, v) for k, v in x.iteritems() if k > 2)
>>> y
{9: 'd', 4: 'a'}
答案 7 :(得分:0)
此解决方案在键t
处打印键x
和字典t
中的值。
x = {4:"a", 1:"b", 0:"c", 9:"d"}
for t in x:
if t > 2:
print t, x[t]
答案 8 :(得分:0)
使用lambda函数
(lambda x:[(k,v) for k,v in x.iteritems() if k > 2])(x)