Как добавить недостающие значения во вложенный список на основе другого вложенного списка? - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть вложенные списки:

pw = [[[1, 0.020387050117001683],
       [2, 0.023095733958878487]],
      [[1, 0.020387050117001683],
       [2, 0.023095733958878487],
       [3, 0.05133549261794933]]]

В подсписках отсутствуют определенные c значения, которые я сохранил в другом вложенном:

nl = [[0 ,0.01], [3, 0.01]]

В подсписке 1 отсутствует записи с нулями и тремя на index 0, в то время как в подсписке 2 отсутствует запись с нулями на index 0.

Мой желаемый результат будет выглядеть так:

pw = [[[0 ,0.01],
       [1, 0.020387050117001683],
       [2, 0.023095733958878487]
       [3 ,0.01]],
      [[0 ,0.01],
       [1, 0.020387050117001683],
       [2, 0.023095733958878487],
       [3, 0.05133549261794933]]]

Однако мой код :

for line in pw:
    for l in line:
        for f in nl: 
            if not any (f[0] in l[0] for f in nl):
                l.append(f)

Выдает эту ошибку:

TypeError: argument of type 'int' is not iterable

Как я могу сделать это правильно?

Ответы [ 4 ]

1 голос
/ 28 февраля 2020

Это будет проверять, есть ли пункт "pw", и добавляется соответственно.

pw = [[[1, 0.020387050117001683],
   [2, 0.023095733958878487]],
  [[1, 0.020387050117001683],
   [2, 0.023095733958878487],
   [3, 0.05133549261794933]]]

nl = [[0 ,0.01], [3, 0.01]]

nl_zero, nl_one = zip(*nl)
for i in pw:
    pwi_zero,pwi_one=zip(*i)
    for j in nl_zero:
        if(j not in pwi_zero):
            item_index=nl_zero.index(j)
            i.append([nl_zero[item_index],nl_one[item_index]])
print(pw)

Output:
     [[[1, 0.020387050117001683], [2, 0.023095733958878487], [0, 0.01], [3, 0.01]], [[1, 0.020387050117001683], [2, 0.023095733958878487], [3, 0.05133549261794933], [0, 0.01]]]
1 голос
/ 28 февраля 2020

Вы на самом деле используете свои вложенные списки, так как они являются словарями, поэтому я бы преобразовал их в простые словари для упрощения обработки:

hpw = [dict(i) for i in pw]   # convert nested list to dicts

for h in hpw:                 # add missing values to the dicts
    for i in nl:
        if i[0] not in h:
            h[i[0]] = i[1]

pw = [sorted([[k,v] for k,v in h.items()]) for h in hpw]  # convert back to sorted nested lists
0 голосов
/ 28 февраля 2020

попробуйте это:

pw = [
       [ # line
         [1, 0.020387050117001683], # f
         [2, 0.023095733958878487]
       ],
       [
         [1, 0.020387050117001683],
         [2, 0.023095733958878487],
         [3, 0.05133549261794933]
       ]
     ]

nl = [ 
         [0 ,0.01], # f
         [3, 0.01]
     ]

for line in pw:
    missing = []
    for f in nl:
        for l in line:
            if f[0] != l[0]: # compare first elements
                missing.append(f)
                break # done with this "f" avoid appending again 
    for m in missing:
      line.append(m)

print(pw)
0 голосов
/ 28 февраля 2020

Если вам нужно только вставить нулевой и третий индексы в Sublist1 и нулевой индекс в Sublist2. Таким образом, вы можете использовать этот метод:

for line in pw:
    if nl[0] not in line:
        line.insert(0,nl[0])

if nl[1] not in pw[0]:
    pw[0].insert(3,nl[1])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...