社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

python:如果共享第一个单词,则对列表中的值求和

zara kolagar • 3 年前 • 1444 次点击  

我的清单如下:,

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()]

然而,由于某种原因,最后的总结不起作用,我没有得到我想要的结果

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/129058
 
1444 次点击  
文章 [ 4 ]  |  最新文章 3 年前
wwii
Reply   •   1 楼
wwii    3 年前

由于某种原因,最后的总结不起作用

要修复原始解决方案,请执行以下操作:

  • 如果字典中没有密钥,请使用 d[key] = [value] 而不是 d[key] = [key] 那你就不需要了 val = [val.pop(0) for k,val in d.items()]

  • 如果键在字典中,则将该值附加到 else 条款

    for key, value in new_list:
        if key not in d:
            d[key] = [value]
        else:
            d[key].append(value)
    
Eli Harold Dan Green
Reply   •   2 楼
Eli Harold Dan Green    3 年前

一种可能的方法是:

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
Eli Harold Dan Green
Reply   •   3 楼
Eli Harold Dan Green    3 年前

您可以非常简单地执行此操作,而无需导入其他模块,如:

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(output)

输出:

[('hello', 19), ('mellow', 13), ('yellow', 9)]
Eli Harold Dan Green
Reply   •   4 楼
Eli Harold Dan Green    3 年前

下面是一个变体,用于使用 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)

在这两种情况下,您都可以将输出转换为 list 属于 tuple s使用:

list(count.items())
# -> [('hello', 19), ('mellow', 13), ('yellow', 9)]

我运行了你的代码,得到了正确的结果(尽管不是你想要的格式)。