我想构建一个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
)
答案 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())
根据需要在函数内部使用循环选项。