根据长度将值附加到字典?

时间:2013-04-24 09:45:15

标签: python

我有一个列表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]}   

但是对于我没有附加第4项的列表,我希望将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 个答案:

答案 0 :(得分: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之上,因为您只使用密钥进行索引(这不是必需的,因为您已经有了对该值的引用)。我还将内部循环解压缩为单个变量。我建议给他们有意义的名字(我只使用i0i1i2,因为我不知道这些值是什么意思。)