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, }

我想要一种编辑这本词典的好方法。对于每个条目,我希望添加另一个值是 value/5,而输入的第三个值是 value/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]}

我必须用很多条目来做到这一点,所以如果我可以以 python 的方式添加它们,这将比只输入它们要好。对于其他字典,5 或 190 也是可变的,因此能够轻松更改它会很好,这是不进行硬编码的另一个原因。例如,另一个字典可能具有我需要除以 4 并为第二个元素添加 200 的规则,然后对于第三个元素,我可能必须添加另一个变量编号。

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

3 回答 3

7

一个 dict 理解可以解决问题:

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

对于 Python 3,替换.iteritems()为 just .items(),对于 Python 2.6 及之前的版本,使用生成器表达式生成 (key, value) 元组:

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]}
于 2013-04-23T15:27:15.983 回答
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)
于 2013-04-23T15:33:12.450 回答
0

我认为值得一提的其他选项是使用字符串:

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

然后用 提取值eval

>>> eval("10564/4+200")
2841
于 2013-04-23T15:28:16.743 回答