这是我的程序,通过weightList我希望它使用在我的。csv文件中定义的权重。但它给了我错误:ValueError:权重的数量不匹配的人口
with open(f"{file}", "r") as f:
for i in f:
list1 = i.split(",")
idList = list1[0]
weightList = random.choices(list1, weights=(list1[6]))
如何解决这个问题?提前感谢
weight
参数也应该是具有list1
长度的list
您只是给weight
一个元素(list1[6]
)。
你应该给出weights
的列表。
例如,如果列表有8个元素,如ID
,Entity
,Name
,Size
,Zone
,Metric
,FileName
,Weight
。必须给weight
参数一个长度为8
的列表,例如:[1,3,5,2,1,3,2,1]
weights = [1,3,5,2,1,3,2,1]
weightList = random.choices(list1, weights=weights)
根据您下面的评论更新:
从文件中,我只需要
ID
和weight
如你所说;每行有10
元素,您只需要每行的ID
和weight
。ID
是该行的第一个元素(索引为0
)和第8个元素(索引为7
),您可以使用split()
:
[...]
elements = i.split(",")
ID , weight = elements[0] , elements[7]
[...]
你也提到过:
最后输出应该只有
ID
基于weight
年代。
您可以根据weight
创建dictionary
来容纳ID
。实际上你根本不需要random.choices()
。
ids_based_on_weights = dict()
with open(f"{file}", "r") as f:
for line in f:
list1 = line.split(",")
id, weight = list1[0], list1[7]
if weight in ids_based_on_weights:
ids_based_on_weights[weight].append(id)
else:
ids_based_on_weights[weight] = [id]
print(ids_based_on_weights) # output: IDs based on their Weights