-1

请帮我做这个作业:

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

输出应该是这样的:

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

2 回答 2

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。

于 2012-06-27T09:47:33.883 回答
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})
于 2012-06-27T10:55:17.253 回答