![](/img/trans.png)
[英]How do I sum the first value in each tuple in a list of tuples in 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.