[英]How can I transform it in a list of tuples key-value again?
我要轉換它:
[('user1', 10),('user2',2),('user2',24),('user1',10),('user3',15),('user3',8)]
對此:
[('user2', 0.52), ('user3', 0.46), ('user1', 0.4)]
我需要添加值,按用戶分組,應用2%的比率並按后代值排序。
我已經用libs完成了解決方案,但是我只想用條件語句來完成。 我正在使用jupyter筆記本。
e = [('user1', 10),('user2',2),('user2',24),('user1',10),('user3',15),('user3',8)]
type(e)
users = ["user1","user2","user3"]
for u in users:
value = 0
for t in e:
user = t[0]
if user == u:
value = value + t[1]
finalValue = value* 0.02
我已經嘗試了很多次來轉換"finalValue"
但是我收到了消息
“'float'對象不可迭代”。
使用collections.defaultdict
例如:
from collections import defaultdict
result = defaultdict(int)
data = [('user1', 10),('user2',2),('user2',24),('user1',10),('user3',15),('user3',8)]
for k, v in data:
result[k] += v
result = {k: v*0.02 for k, v in result.items()}
#or result = [(k, v*0.02) for k, v in result.items()]
print(result)
輸出:
{'user2': 0.52, 'user3': 0.46, 'user1': 0.4}
您的代碼只需要稍作修改即可執行您想要的操作:
e = [('user1', 10),('user2',2),('user2',24),('user1',10),('user3',15),('user3',8)]
type(e)
users = ["user1","user2","user3"]
f = [] # initialize list for storing final values
for u in users:
value = 0
for t in e:
user = t[0]
if user == u:
value = value + t[1]
finalValue = value* 0.02
f.append((u, finalValue)) # add final value to list
這樣,我得到f
的值:
[('user1', 0.4), ('user2', 0.52), ('user3', 0.46)]
這是另一種方式。 首先,獲得一組唯一用戶,然后對出現該唯一用戶的所有實例求和。 然后使用dict-comprehension獲得結果:
l = [('user1', 10),('user2',2),('user2',24),('user1',10),('user3',15),('user3',8)]
uniq_user = set(m[0] for m in l)
# uniq_user = {'user1', 'user2', 'user2'}
l2 = [(i, sum(n[1] for n in l if n[0]==i)) for i in uniq_user]
# l2 = [('user3', 23), ('user1', 20), ('user2', 26)]
outp = {i1 : i2*0.02 for i1,i2 in l2}
輸出 :
{'user3': 0.46, 'user1': 0.4, 'user2': 0.52}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.