簡體   English   中英

如何再次將其轉換為元組鍵值列表?

[英]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.

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