Python的字典帮助

时间:2012-05-04 04:03:38

标签: python dictionary

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

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

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

但是,所有的输出都只是关键。

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

另外,我如何以词典的形式{key : value}

来获得这个

9 个答案:

答案 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)