根据范围设置字典值

时间:2014-04-29 08:11:47

标签: python dictionary range

index = {
    u'when_air': 0,
    u'chrono': 1,
    u'age_marker': 2,
    u'name': 3
}

除了手动设置每个值之外,我怎样才能使这个更漂亮(更清晰)?

像:

index = dict_from_range(
    [u'when_air', u'chrono', u'age_marker', u'name'],
    range(4)
)

4 个答案:

答案 0 :(得分:4)

您可以将zip()的结果提供给内置dict()

>>> names = [u'when_air', u'chrono', u'age_marker', u'name']
>>> print(dict(zip(names, range(4))))
{'chrono': 1, 'name': 3, 'age_marker': 2, 'when_air': 0}

zip()将返回元组列表,其中每个元组是来自namesrange(4) ith 元素。 dict()知道如何根据该字典创建字典。

请注意,如果将不均匀长度的序列赋予zip(),则结果将被截断。因此,使用range(len(names))作为参数可能是明智的,以保证相等的长度。

>>> print(dict(zip(names, range(len(names)))))
{'chrono': 1, 'name': 3, 'age_marker': 2, 'when_air': 0}

答案 1 :(得分:4)

您可以将dict理解与内置函数enumerate一起使用,以按所需顺序从键构建字典。

示例:

keys = [u'when_air', u'chrono', u'age_marker', u'name']
d = {k: i for i,k in enumerate(keys)}
print d

输出结果为:

{u'age_marker': 2, u'when_air': 0, u'name': 3, u'chrono': 1}

请注意,在Python 3.4中添加了enum模块。它可以比字典更方便地提供所需的语义。


供参考:

答案 2 :(得分:1)

index = {k:v for k,v in zip(['when_air','chrono','age_marker','name'],range(4))}

答案 3 :(得分:1)

此?

#keys = [u'when_air', u'chrono', u'age_marker', u'name']

from itertools import count
print dict(zip(keys, count()))