2013-04-24 2 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]} 

Однако для списков, в которые я не добавлял 4-й элемент, я хочу добавить 0 к концу каждого из них, у меня нет проблем с циклом, чтобы сделать это, но есть ли способ редактировать мою треску е выше, чтобы сделать это?

EDIT: Путь я это сделал, что я хочу, чтобы улучшить

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

+0

Спасибо, я добавил пару недостающих строк. – Paul

ответ

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, i1 и i2, потому что я не знаю, что означают значения).

+0

Спасибо, конечно, я буду использовать лучшие имена, если это не пример :) Ваш код не работает должным образом, я хочу добавить 0, когда len <= 3 также. так что другой не будет работать. (Я не понимаю второй фрагмент кода, прочитаю об этом) – Paul

+1

ОК, я думаю, я не понимаю, что вы пытаетесь сделать. Можете ли вы уточнить вопрос с дополнительной информацией о том, что вы ожидаете получить в разных ситуациях? Например, можете ли вы показать короткий список примеров и словарь, у которых есть некоторые значения, которые являются короткими (и поэтому будут добавлены), а некоторые из них длиннее (и поэтому будут пропущены)? Пожалуйста, покажите желаемый результат для обеих ситуаций! – Blckknght

+0

Я добавил, что конечный результат должен быть, как вы можете видеть, если не было соответствующего значения для добавления в списки, вместо этого было добавлено 0. Например, 10787 был в словаре, но не в списке, поэтому мне пришлось добавить 0 к этой записи. – Paul

Смежные вопросы