我尋求操作一個串列,如下所示:
# key。
例子 = [[2, 2, -10, 'Yes'] 。
[2, 8, 21, 'Yes'] 。
[2, 19, 14, 'Non'] 。
[2, 30, -22, 'Non'] 。
[4, -15, 31, 'Yes'] 。
[4, 2, 17, 'Yes'] 。
[4, 3, -90, '非']]
# What I have tried through dictionaries dict()
for i in 示例。
if i[0] in dictsum.keys()。
if i[3] == "Yes"/span>:
dictsum[i[0]][0] =dictsum[i[0]][0] i[1]
dictsum[i[0]][1] = dictsum[i[0]] [1] i[2]
else:
dictsum[i[0]] = [i[1], i[2] ]
onlysum = [[k,v[0], v[1] ] for k,v in dictsum.items() ]
如前所述,所有的行'i[1]'和'i[2]'已經被添加,尊重他們的鍵'i[0]'和一個條件'i[3]'。
我試圖做的是,如果i[3]=="Non",找到離零最遠的值,并根據其相應的鍵'i[0]'添加該值
。應該這樣:
result = [[2, 10 30, 11 (-22)】。
[4, -13 3, 48 (-90)]]
# 最后
結果 = [[2, 40, -11] 。
[4, -10, -42 ]]
我澄清一下,這是我自己提出的一個例子,以了解在這些情況下串列是如何操作的,我不是專家。如果有人知道有什么方法可以給你一個解決方案和反饋,我很感謝你的分享,親切的問候。
uj5u.com熱心網友回復:
你可以這樣做:
dictsum = collections.defaultdict(lambda: [0, 0] )
max_non_values = collections.defaultdict(lambda: [0, 0] )
def special_max(x, y) 。
if abs(x) < abs(y)。
return y
elif abs(x) > abs(y)。
return x
else:
return max(x, y)。
for key, val_1, val_2, include in 示例。
if include == "Yes"/span>:
dictsum[key][0] = dictsum[key][0] val_1
dictsum[key][1] = dictsum[key][1] val_2
else:
max_non_values[key][0] = special_max(max_non_values[key][0] , val_1)
max_non_values[key][1] = special_max(max_non_values[key][1], val_2)
onlysum = [[k, dictsum[k][0] max_non_values[k][0] 。dictsum[k][1] max_non_values[k][1] ] for k in dictsum ]
由于你要取一個總和,使用defaultdict比檢查dict中的鍵更快、更簡單;你也需要進行兩次傳遞,或者使用兩個dict。另外,我建議將 "example "中的值變成一個類,或者至少是一個命名的圖元。作為一個非結構化的整數和字串的異質串列來收集資料,在幾行代碼之外就變得難以管理了。
。uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
CodePudding
dictsum = {i[0] 。[sum(x[1] for x in example if x[0]==i[0] and x[-1]=="Yes"/span>)。)
sum(x[2] for x in例子 if x[0]==i[0] and x[-1]=="Yes"/span>)] for i in example}。
>>> dictsum
{2: [10, 11], 4: [-13, 48] }
- 使用
max與所需的key函式為每個鍵更新第0和第1個串列元素:
output = {k: [v[0] max([l[1] for l in example if l[0]==k and l[-1]=="Non"/span>]。key=abs)。)
v[1] max([l[2] for l in example if l[0]==k and l[-1]=="Non"/span>]。key=abs)]
for k,v in dictsum.items()}。
>>> 輸出
{2: [40, -11], 4: [-10, -42]}。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/311660.html
標籤:
下一篇:用CV2讀取影像的速度太慢
