2013-04-24 63 views
0

我有一个列表uarfcnrssi2和一个列表band2的词典列表。然后,我有在其下从uarfcnrssi2加到BAND2,如下所示值一定的条件:根据长度将值附加到字典中?

uarfcnrssi2=[[10564, 20, 1],[10637, 26, 1], [10662, 32, 1], [10712, 26, 1], [10837, 15, 1], [10837, 17, 1], 
[2, 10, 13], [3, 18, 13], [44, 12, 13], [10564, 27, 13], [49, 15, 13], [64, 20, 13], [66, 19, 13], [976, 27, 13], [981, 21, 13], [982, 20, 13], [985, 13, 13], [988, 13, 13], [788, 12, 11]]  

band2= {'channel1': 10564, 'channel2': 10589, 'channel3': 10612, 'channel4': 10637,'channel5': 10662, 'channel6': 10687, 
'channel7': 10712, 'channel8': 10737, 'channel9': 10762, 'channel10': 10787,'channel11': 10812, 'channel12': 10837, } 
var1 = 5 
var2 = -190 
band2 = {k: [v, v/var1, v/var1+var2] for k, v in band2.iteritems() 

代码:

for k, v in band2.items(): 
    for i in uarfcnrssi2: 
     if v[0] == i[0] and i[2] == 1 and len(v)<=3: 
      band2[k].append(i[1]) 

我现在有这样的字典:

{'channel11': [10812, 2162, 1972], 'channel10': [10787, 2157, 1967], 'channel3': [10612, 2122, 1932], 'channel2': [10589, 2117, 1927], 'channel1': [10564, 2112, 1922, 20], 'channel7': [10712, 2142, 1952, 26], 'channel6': [10687, 2137, 1947], 'channel5': [10662, 2132, 1942, 32], 'channel4': [10637, 2127, 1937, 26], 'channel9': [10762, 2152, 1962], 'channel8': [10737, 2147, 1957], 'channel12': [10837, 2167, 1977, 15]} 

然而,对于我没有附加第四项的列表,我想0被追加到每个的末尾,我没有问题循环再次做到这一点,但有没有办法编辑我的鳕鱼上面这样做吗?

编辑:这样,我做到了,我想提高

for k, v in band2.items(): 
    for i in uarfcnrssi2: 
     if v[0] == i[0] and i[2] == 1 and len(v)<=3: 
      band2[k].append(i[1]) 

for k, v in band2.items(): 
    if len(v) <=3: 
     band2[k].append(0) 
print band2 

最终输出:

band2 = {'channel11': [10812, 2162, 1972, 0], 'channel10': [10787, 2157, 1967, 0], 'channel3': [10612, 2122, 1932, 0], 'channel2': [10589, 2117, 1927, 0], 'channel1': [10564, 2112, 1922, 20], 'channel7': [10712, 2142, 1952, 26], 'channel6': [10687, 2137, 1947, 0], 'channel5': [10662, 2132, 1942, 32], 'channel4': [10637, 2127, 1937, 26], 'channel9': [10762, 2152, 1962, 0], 'channel8': [10737, 2147, 1957, 0], 'channel12': [10837, 2167, 1977, 15]} 
+1

您所显示的代码将不起作用,除非'band2'已经有列表作为值,但是您已经用单个'int'值显示它。这是一个错误吗? – Blckknght 2013-04-24 09:51:18

+0

谢谢,我添加了几条缺失的行。 – Paul 2013-04-24 09:57:38

回答

0

好吧,我现在明白了这个问题。我想,你可以结合你的两个循环,就像这样:

for v in band2.values(): 
    for i1, i2, i3 in uarfcnrssi2: 
     if v[0] == i0 and i2 == 1 and len(v) <= 3: 
      v.append(i1) 
    if len(v) <= 3: # never matched any list values, so add zero instead 
     v.append(0) 

注意,外环是在字典的values,因为你只使用索引键(这是没有必要的,因为你已经有一个参考值)。我也让内部循环将三个值解压为单个变量。我建议给他们有意义的名字(我只使用i0,i1i2,因为我不知道这些值的含义)。

+0

谢谢我当然会使用更好的名字时,它不是例子:)你的代码不能按预期工作,我还想在len <= 3时附加0。所以别的都不行。 (我不明白第二部分的代码,将读到这一点) – Paul 2013-04-24 10:15:38

+1

好吧,我想我不明白你想要做什么。你能否更新这个问题,提供更多关于你在不同情况下获得的信息?例如,你可以显示一个简短的例子列表和字典,它们有一些很短的值(所以会被附加到)以及一些较长的值(因此会被跳过)?请为两种情况显示所需的输出! – Blckknght 2013-04-24 10:21:17

+0

我已经附加了最终输出应该是什么,你可以看到,如果没有相应的值添加到列表中,而是添加了0。例如,10787在字典中,但不在列表中,所以我必须在该条目中添加0。 – Paul 2013-04-24 10:28:46