繁体   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