字典稀疏矢量Python

时间:2012-06-27 09:45:13

标签: python

请帮我完成这项功课:

makeA({0:1,2:1,4:2,6:1,9:1})

输出应该是这样的:

[1, 0, 1, 0, 2, 0, 1, 0, 0, 1]

2 个答案:

答案 0 :(得分:5)

尝试列表理解:

def makeA(d, default=0):
    """Converts a dictionary to a list. Pads with a default element

    Examples:

    >>> makeA({0: 1, 2: 1, 4: 2, 6: 1, 9: 1})
    [1, 0, 1, 0, 2, 0, 1, 0, 0, 1]

    >>> makeA({3: 'kos'},'')
    ['', '', '', 'kos']

    """
    maxElem = max(d)
    return [d.get(x, default) for x in range(maxElem+1)]

函数体的第一行找到dict中的最大键(因为dict个对象在迭代时产生它们的键)。如果最大键为5,则需要一个包含6个元素[0..6]的数组。

最后一行对序列0 .. maxElem使用列表推导,对于此序列的每个值,为此键指定d的值,如果不存在则指定0。

答案 1 :(得分:1)

是的,您可以在列表理解中执行默认值。但我觉得让defaultdict类为你做的更好的风格。并且您可以获得更易读的代码! : - )

from collections import defaultdict

def makeA(d):
    dd = defaultdict(int, d)
    return [dd[n] for n in range(10)]


print makeA({0: 1, 2: 1, 4: 2, 6: 1, 9: 1})