簡體   English   中英

如何基於第一個值Python替換元組排序列表中的元組

[英]How to replace a tuple in sorted list of tuples basing on first value Python

我是python的新手,正在尋求解決以下問題的幫助

我需要根據提供的數據創建一個排序的元組/字典列表。 然后,當提供新數據並具有相同的第一個鍵時,我想用新的替換它的值。 更清楚地說,我將舉個例子...想象一下,我有數據,如下所示:

data = [(1, 100), (2, 200), (4, 400), (7, 900)]

然后我有來自用戶的新條目,例如:

(4,500)

所以,現在我想用(4,400)替換這個元組,用(4,500)替換這個元組。 我知道元組是不可變的,因此我不想更新任何內容,只需刪除基於鍵(此處為4)的上一個元組,然后將其替換為新的元組。

到目前為止,我使用了另一個堆棧中的類,該類以排序的方式將每個新條目(元組)插入到元組列表中,並且我希望它保持這種方式,因為進一步,我需要計算最接近的上下數以提供一個如果它不在列表中。

我的代碼如下所示:

from bisect import bisect_left


class KeyWrapper:
    def __init__(self, iterable, key):
        self.it = iterable
        self.key = key

    def __getitem__(self, i):
        return self.key(self.it[i])

    def __len__(self):
        return len(self.it)

data = [(1, 100), (2, 200), (4, 400), (7, 900)]
data.sort(key=lambda c: c[0])

newcol = (3, 500)

bslindex = bisect_left(KeyWrapper(data, key=lambda c: c[0]), newcol[0])
data.insert(bslindex, newcol)

輸出如下:

[(1,100),(2,200),(3,500),(4,400),(7,900)]

並為ex提供新的變量。 newcols2 = (3,600) ,基於元組的第一個元素(此處為3),我想像這樣輸出:

[(1,100),(2,200),(3,600),(4,400),(7,900)]

這個怎么樣?

data = [(1, 100), (2, 200), (4, 400), (7, 900)]
new = (4, 500)

# Filter out matching
data = [i for i in data if i[0] != new[0]]
# Add the new
data.append(new)
# Re-sort
data = sorted(data, key=lambda x: x[0])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM