Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何根据条件对元组中成对的元素求和?_Python_Python 3.x_Tuples - Fatal编程技术网

Python 如何根据条件对元组中成对的元素求和?

Python 如何根据条件对元组中成对的元素求和?,python,python-3.x,tuples,Python,Python 3.x,Tuples,我有一个元组列表(第一个元素,例如string3可能重复):[('string1',10),('string2',200),('string3',50),('string3',45)]。我需要返回一个包含“string”(元组的第一个元素)的列表,该列表根据它们对的总和进行排序,只有当总和小于某个阈值时,我才应该将它们包含在列表中 因此,如果阈值为100,结果应该类似于['string3','string1']如果内存不是问题,您可以创建一个字典,它将存储每个唯一键的第二个元素的总和。请尝试以下

我有一个元组列表(第一个元素,例如string3可能重复):[('string1',10),('string2',200),('string3',50),('string3',45)]。我需要返回一个包含“string”(元组的第一个元素)的列表,该列表根据它们对的总和进行排序,只有当总和小于某个阈值时,我才应该将它们包含在列表中


因此,如果阈值为100,结果应该类似于['string3','string1']

如果内存不是问题,您可以创建一个字典,它将存储每个唯一键的第二个元素的总和。请尝试以下代码-

lst = [('string1',10), ('string2', 200), ('string3', 50), ('string3',45)]
d= dict()
threshold = 100
for tup in lst:
    if tup[0] not in d:
        d[tup[0]] = tup[1]
    else: d[tup[0]] += tup[1]
item_pairs = sorted(d.items(), key=lambda x: x[1], reverse=True)
lst = [tup[0] for tup in item_pairs if tup[1] < threshold]
print lst
lst=[('string1',10),('string2',200),('string3',50),('string3',45)]
d=dict()
阈值=100
对于lst中的tup:
如果tup[0]不在d中:
d[tup[0]]=tup[1]
否则:d[tup[0]+=tup[1]
item_pairs=已排序(d.items(),key=lambda x:x[1],reverse=True)
lst=[tup[0],如果tup[1]<阈值]
打印lst
def排序阈值(ls,阈值=100):
a={}
对于键,ls中的val:
a[key]=a.get(key,0)+val

a={key:val表示键,如果val使用另一个解决方案,则在a.items()中使用val

import pandas as pd
l = [('string1',10), ('string2', 200), ('string3', 50), ('string3',45)]
df = pd.DataFrame(l, columns=["String", "Value"])
df = df.groupby(["String"], as_index=False)["Value"].sum()
df=df[df["Value"]<100]
df=df.sort_values("Value", ascending=False)
print(df["String"].tolist())
将熊猫作为pd导入
l=[('string1',10),('string2',200),('string3',50),('string3',45)]
df=pd.DataFrame(l,列=[“字符串”,“值”])
df=df.groupby([“String”],as_index=False)[“Value”].sum()

df=df[df[“Value”]一个简单的解决方案是用a求和,然后反向排序,只保留键:

from collections import Counter

lst = [('string1',10), ('string2', 200), ('string3', 50), ('string3',45)]

counts = Counter()
for string, number in lst:
    counts[string] += number

print(sorted((k for k, v in counts.items() if v < 100), reverse=True))
# ['string3', 'string1']
从集合导入计数器
lst=[('string1',10),('string2',200),('string3',50),('string3',45)]
计数=计数器()
对于字符串,lst中的数字:
计数[字符串]+=数字
打印(已排序((k表示k,v表示计数项目(),如果v<100),则反向=真))
#['string3','string1']

你想展示你到目前为止所做的尝试吗?这个解决方案有什么问题吗?它不解决OP的目的吗?而不是
a.update({key:a.get(key,0)+val})
你可以做
a[key]=a.get(key,0)+val
。@RoadRunner,我没有使用defaultdict,所以我不能做
a[key]
因为
a
是一个空字典。如果你使用defaultdict,那么你将执行
a[key]+=val
对我有效:@RoadRunner我明白你的意思。在作业发生之前,会对右边进行评估。谢谢!非常优雅的解决方案。为什么我们不能在
sorted()
函数中使用
key=lambda x:x[1]
from collections import Counter

lst = [('string1',10), ('string2', 200), ('string3', 50), ('string3',45)]

counts = Counter()
for string, number in lst:
    counts[string] += number

print(sorted((k for k, v in counts.items() if v < 100), reverse=True))
# ['string3', 'string1']