将算术值添加到字典?

时间:2013-04-23 15:25:16

标签: python

我有一本字典,如下所示。

band1= {'channel1': 10564, 'channel2': 10589, 'channel3': 10612, 'channel4': 10637,'channel5': 10662, 'channel6': 10687,
'channel7': 10712, 'channel8': 10737, 'channel9': 10762, 'channel10': 10787,'channel11': 10812, 'channel12': 10837, }

我想要一种编辑这本词典的好方法。对于每个条目,我希望添加的另一个值是值/ 5,输入的第三个值是值/ 5-190

然后字典看起来像(表达式实际上转换为它们的最终值):

band1= {'channel1': [10564, 10564/5, 10564/5-190], 'channel2': [10589,10589/5,10589/5-190], 'channel3': [10612,10612/5,10612/5-190], 'channel4': [10637,10637/5,10637/5-190],
'channel5': [10662,10662/5,10662/5-190], 'channel6': [10687,10687/5,10687/5-190],
'channel7': [10712, 10712/5, 10712/5-190], 'channel8': [10737,10737/5,10737/5-190], 'channel9': [10762,10762/5,10762/5-190], 'channel10': [10787,10787/5,10787/5-190],'channel11': [10812,10812/5,10812/5-190], 'channel12': [10837,10837/5,10837/5-190]}

我必须使用大量条目执行此操作,因此如果我可以以pythonic方式添加它们,那么最好只键入它们。另外5或190对于其他字典也是可变的,因此能够容易地改变它是很好的,这是不硬编码的另一个原因。例如,另一个字典可能具有我需要除以4的规则并为第二个元素添加200,然后对于第三个元素,我可能需要添加另一个变量数。

band2= {'channel1': [10564, 10564/4+200, 10564/4+200+100]

3 个答案:

答案 0 :(得分:7)

字典理解会起到作用:

var1 = 5
var2 = -190
{k: [v, v/var1, v/var1+var2] for k, v in band1.iteritems()}

对于Python 3,将.iteritems()替换为.items(),对于Python 2.6和之前,使用生成器表达式生成(键,值)元组:

dict((k, [v, v/var1, v/var1+var2]) for k, v in band1.iteritems())

然后,您的第二个字典var1var2分别设置为4200

演示:

>>> {k: [v, v/var1, v/var1+var2] for k, v in band1.iteritems()}
{'channel11': [10812, 2162, 1972], 'channel10': [10787, 2157, 1967], 'channel3': [10612, 2122, 1932], 'channel2': [10589, 2117, 1927], 'channel1': [10564, 2112, 1922], 'channel7': [10712, 2142, 1952], 'channel6': [10687, 2137, 1947], 'channel5': [10662, 2132, 1942], 'channel4': [10637, 2127, 1937], 'channel9': [10762, 2152, 1962], 'channel8': [10737, 2147, 1957], 'channel12': [10837, 2167, 1977]}

答案 1 :(得分:2)

如果你想从头开始用这些值构建字典,这可能采取不同的形式,我会选择小辅助函数:

def manip1(k, a, b):
    return [k, k/a, k/a - b]

def manip2(k, a, b, c):
    return you_name_it(k, a, b, c)

# and then
band1['channel2'] = manip1(10564, 5, 190)
band1['channel3'] = manip2(10600, 5, 190, 200)

答案 2 :(得分:0)

其他选项我认为很高兴使用字符串:

band2= {'channel1': ['10564', '10564/4+200', '10564/4+200+100']

然后使用eval

提取值
>>> eval("10564/4+200")
2841