我有一個清單如下,
flat_list = ['hello,5', 'mellow,4', 'mellow,2', 'yellow,2', 'yellow,7', 'hello,7', 'mellow,7', 'hello,7']
如果它們共享相同的單詞,我想得到值的總和,所以輸出應該是,
所需的輸出:
l = [('hello',19), ('yellow', 9), ('mellow',13)]
到目前為止,我已經嘗試了以下,
new_list = [v.split(',') for v in flat_list]
d = {}
for key, value in new_list:
if key not in d.keys():
d[key] = [key]
d[key].append(value)
# getting rid of the first key in value lists
val = [val.pop(0) for k,val in d.items()]
# summing up the values
va = [sum([int(x) for x in va]) for ka,va in d.items()]
但是由于某種原因,最后的總結不起作用,我沒有得到我想要的輸出
uj5u.com熱心網友回復:
這是使用以下方法實作目標的變體defaultdict:
from collections import defaultdict
t = ['hello,5', 'mellow,4', 'mellow,2', 'yellow,2',
'yellow,7', 'hello,7', 'mellow,7', 'hello,7']
count = defaultdict(int)
for name_number in t:
name, number = name_number.split(",")
count[name] = int(number)
你也可以使用Counter:
from collections import Counter
count = Counter()
for name_number in t:
name, number = name_number.split(",")
count[name] = int(number)
在這兩種情況下,您都可以使用以下方法將輸出轉換為 a listof tuples:
list(count.items())
# -> [('hello', 19), ('mellow', 13), ('yellow', 9)]
我運行了您的代碼,并且確實得到了正確的結果(盡管不是您想要的格式)。
uj5u.com熱心網友回復:
一種可能的方法是:
import pandas as pd
flat_list = ['hello,5', 'mellow,4', 'mellow,2', 'yellow,2', 'yellow,7', 'hello,7', 'mellow,7', 'hello,7']
new_list = [v.split(',') for v in flat_list]
df = pd.DataFrame(new_list)
df[1] = df[1].astype(int)
df2 = df.groupby(0).sum()
print(df2)
輸出:
0 1
hello 19
mellow 13
yellow 9
uj5u.com熱心網友回復:
您可以非常簡單地做到這一點,而無需像這樣匯入其他模塊:
t = ['hello,5', 'mellow,4', 'mellow,2', 'yellow,2', 'yellow,7', 'hello,7', 'mellow,7', 'hello,7']
d = {}
for s in t: #for each string
w, n = s.split(',') #get the string and the number
d[w] = d[w] int(n) if w in d.keys() else int(n) #add the number (sum)
l = list(d.items()) #make the result a list of tuples
print(l)
輸出:
[('hello', 19), ('mellow', 13), ('yellow', 9)]
uj5u.com熱心網友回復:
最后的總結不起作用,我沒有得到我想要的輸出
實際上它作業正常,您只是忘記合并兩個串列。添加
print(list(zip(val, va)))
你會看到:
[('hello', 19), ('mellow', 13), ('yellow', 9)]
這相當于您想要的輸出:
[('hello',19), ('yellow', 9), ('mellow',13)]
只有 和 的條目的yellow順序mellow不同,因為mellow它首先出現在輸入中。
uj5u.com熱心網友回復:
由于某種原因,最后的總結不起作用
要修復您的原始解決方案:
d = {ka:sum([int(x) for x in va]) for ka,va in d.items()}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/445159.html
