1

我有一本字典,我想遍历键,测试键,然后打印通过测试的键。

例如,我的代码目前看起来像这样:

x = {4:"a", 1:"b", 0:"c", 9:"d"}
for t in x:
    if t > 2:
        print t

然而,所有的输出是,只是关键。

如何让代码打印出代码末尾的值而不是键?

另外,我如何以字典的形式得到这个,{key : value}

4

9 回答 9

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 理解(Python 2.7/3.0 中的新功能):

filtered = {key: val for key, val in x if key > 2}
于 2012-05-04T04:04:49.403 回答
2
print [(k,v) for k,v in yourDict.items() if test(k)]

(你可以做k for k,v in...or v for k,v in...。如果你只需要值,你可以使用yourDict.values()。)

于 2012-05-04T04:17:18.593 回答
1

If you want to create a dictionary with subset of items, you can also use a dictionary comprehension for 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'}

This is only a newer equivalent with only minor syntax differences for what Johnysweb shows in his answer:

>>> y = dict((k, v) for k, v in x.iteritems() if k > 2)
>>> y
{9: 'd', 4: 'a'}    
于 2012-05-04T07:19:22.520 回答
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
于 2012-05-04T04:04:28.060 回答
1

如果 key > 2,以下列表推导将打印键和值。

尝试这个:

print [(key, value) for key, value in x.iteritems() if key > 2]
于 2012-05-04T04:22:45.943 回答
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'}
于 2012-05-04T04:26:58.280 回答
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
于 2012-05-04T04:32:39.740 回答
0

使用 lambda 函数

(lambda x:[(k,v) for k,v in x.iteritems() if k > 2])(x)

于 2013-01-25T09:08:41.823 回答
0

此解决方案在 key 处打印t字典中的键和xt

x = {4:"a", 1:"b", 0:"c", 9:"d"}
for t in x:
    if t > 2:
        print t, x[t]
于 2012-05-04T04:05:54.153 回答