如何在dict创建过程中从另一个构建Python dict值?

时间:2016-05-04 12:48:59

标签: python dictionary

我想构建一个dict,其中一个值是从另一个构建的。

我想写作

d = {
    'a':1,
    'b':self['a']+1
}

但它没有按预期工作:

>>> {'a':1, 'b':self['a']+1}
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
NameError: name 'self' is not defined

那么,我怎样才能实现Python技巧呢? (我正在使用Python 2.4

2 个答案:

答案 0 :(得分:5)

您无法引用尚未创建的字典。只需在创建字典后分配其他键

d = {'a': 1}
d['b'] = d['a'] + 1

或者,将值设置为单独的变量 first ,然后创建字典:

a_value = 1
d = {'a': a_value, 'b': a_value + 1}

答案 1 :(得分:2)

如果您只有两个值,请计算第一个,然后将b添加为单独的行。

如果依赖关系更复杂,那么使用函数提供值可能是值得的。

Python 2.7以后有字典理解:

mydict = {key: value for (key, value) in iterable}

之前的等价物是:

mydict = dict((key, value) for (key, value) in iterable)

现在提供用于生成值的可迭代函数:

def get_dictionary_values():
    a = get_really_expensive_calculation()
    yield ('a', a)
    b = a + modification_value
    yield ('b', b)
    # Add all other values here that calculate from earlier values.

mydict = dict((key, value) for (key, value) in get_dictionary_values())

根据需要在函数内部使用循环选项。