2013-04-23 105 views
1

我有一本字典,如下所示。將算術值添加到字典?

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] 

回答

7

一個字典理解就可以了:

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

對於Python 3,只有.items()替換.iteritems(),用於Python 2.6和之前,用生成的表達,以產生(鍵,值)元組:

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

關於你的第二字典var1var2然後設置爲4的分別爲d 200

演示:

>>> {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]} 
+0

非常感謝。正是我在找什麼。 – Paul 2013-04-23 15:29:26

0

我認爲其他選項是一個很好的一提的是使用字符串:

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

,然後提取與eval值:

>>> eval("10564/4+200") 
2841 
2

如果您我想用這些值從頭開始構建字典,它們可以採取不同的形式,I會去小幫手的功能:

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) 
+0

謝謝,如果需要的話,這對使用其他公式很有幫助。 – Paul 2013-04-23 15:34:49