Обновление списка списков в Python - PullRequest
1 голос
/ 18 июня 2020

У меня есть следующий список списков:

MyList = [[130, 10], [131, 15], [132, 1]]

Тогда у меня есть несколько входов. Если я получаю, например: Data = [130, 3], [135, 10], мне нужно обновить список следующим образом:

MyList = [[130, 3], [131, 15], [132, 1], [135, 10]]

Итак, если в MyList уже есть подсписок, где первый элемент совпадает с первый элемент подсписка в Data, обновить тот же элемент. Вместо этого, если его нет, добавьте его.

Мне удалось это сделать, но мне было интересно, есть ли более чистое решение, так как оно мне действительно не нравится:

Temp = [x[0] for x in MyList]

for x in Data:
    if x[0] not in Temp:
        Sublist = []
        Sublist.append(x[0])
        Sublist.append(x[1])
        MyList.append(Sublist)
    else:
        for y in MyList:
            if x[0] == y[0]:
                x[1] = y[1]

Есть способ лучше сделать это? Я чувствую, что этот код можно улучшить, мне также не нравится редактировать элементы во время цикла. Приветствуется любая помощь!

Ответы [ 5 ]

4 голосов
/ 18 июня 2020

Самым чистым решением было бы использовать dict для начала. Итак,

>>> data = dict([[130, 10], [131, 15], [132, 1]])
>>> data
{130: 10, 131: 15, 132: 1}
>>> for x, y in [130, 3], [135, 10]:
...     data[x] = y
...
>>> data
{130: 3, 131: 15, 132: 1, 135: 10}

Если вам действительно нужен список в конце:

>>> list(data.items())
[(130, 3), (131, 15), (132, 1), (135, 10)]

Или даже просто:

>>> data = {130: 10, 131: 15, 132: 1}
>>> new_data = [130, 3], [135, 10]
>>> data.update(new_data)
>>> data
{130: 3, 131: 15, 132: 1, 135: 10}
0 голосов
/ 18 июня 2020

Если я правильно понял вашу проблему, это то, что я имею в виду, аналогично вашей.

myList = [[130, 10], [131, 15], [132, 1]]
data = [130, 3], [135, 10]

if data[0][0] == myList[0][0]:
    myList.pop(0)
    myList.insert(0, data[0])
    myList = myList + list(data[1:])
else:
    myList = myList + list(data)

print(myList)

вывод:

[[130, 3], [131, 15], [132, 1], [135, 10]]
0 голосов
/ 18 июня 2020

В соответствии с вашим вопросом, вы можете расширить свой основной список всеми данными, а затем использовать операцию dict для создания словаря

MyList = [[130, 10], [131, 15], [132, 1]]


new_data = [[130, 3], [135, 10]]

MyList.extend(new_data)

final_data=  dict(MyList)
print(final_data)
# {130: 3, 131: 15, 132: 1, 135: 10}
0 голосов
/ 18 июня 2020

Это очищает добавление новой части списка

MyList.append([x])
0 голосов
/ 18 июня 2020

Более чистым решением (если вы настаиваете на использовании списков вместо предпочтительного словаря структуры) может быть:

MyList = [item for item in MyList if item[0] not in [i[0] for i in Data]]
MyList.extend(Data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...