首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排序(和排序)不排序

排序(和排序)不排序
EN

Stack Overflow用户
提问于 2014-09-13 15:40:09
回答 1查看 274关注 0票数 0

我有一个数据文件,它是以以下方式构建的:

source_id,target_id,印象,点击

在其中添加以下列:

  • 对-源和目标的元组。
  • CTR -基本上点击/印象
  • 下界
  • 上界

下限/上限是计算值(这与我的问题无关,但对于好奇的值,these are the bounds for the Wilson confidence interval

问题是,我试着按下界(位置= 6)对列表进行排序,然后降序。尝试了几种方法(排序/排序,使用lambda与使用itemgetter,创建一个新的列表w/o,并尝试只对其排序),但仍然没有发生任何变化。下面有密码。

代码语言:javascript
复制
import csv
from math import sqrt
from operator import itemgetter

#----- Read CSV ----------------------------------------------------------------
raw_data_csv  = open('rawdile', "rb")
raw_reader = csv.reader(raw_data_csv)

#  transform the values to ints.
raw_data = []
for rownum,row in enumerate(list(raw_reader)):
    if rownum == 0:                                                             # Header
        raw_data.append(row)
    else:
        r = []                                                            # Col header
        r.extend([int(x) for x in row])                                     # Transforming the values to ints
        raw_data.append(r)



# Add cols for pairs (as tuple) and CTR
raw_data[0].append("pair")


for row in raw_data[1:]:
    row.append((row[0],row[1]))         # tuple
#    row.append(float(row[3])/row[2])    # CTR



# ------------------------------------------------------------------------------


z = 1.95996398454005


def confidence(n, clicks):

    if n == 0:
        return 0
    phat = float(clicks) / n
    l_bound = ((phat + z*z/(2*n) - z * sqrt((phat*(1-phat)+z*z/(4*n))/n))/(1+z*z/n))        # lower bound
    u_bound = ((phat + z*z/(2*n) + z * sqrt((phat*(1-phat)+z*z/(4*n))/n))/(1+z*z/n))        # upper bound
    return phat, l_bound, u_bound


raw_data[0].extend(["CTR","Lower Bound","Upper Bound"])


for row in raw_data[1:]:
    phat, l_bound, u_bound  = confidence(row[2],row[3])
    row.extend([phat, l_bound, u_bound])



# raw_data[1:].sort(key=lambda x: x[6], reverse=True) 

sorted(raw_data[1:], key=itemgetter(6), reverse=True)



outputfile= open('outputfile.csv', 'wb')
wr = csv.writer(outputfile,quoting = csv.QUOTE_ALL)

wr.writerows(raw_data)


raw_data_csv.close()
outputfile.close()

有人能说出原因吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2014-09-13 16:54:04

在一次尝试(这将创建一个新的list对象)中,您正在对一个切片进行排序,而在另一个尝试中,您忽略了sorted()的返回值。

不能对这样的列表进行排序;相反,可以通过连接创建一个新列表:

代码语言:javascript
复制
rows = rows[:1] + sorted(raw_data[1:], key=itemgetter(6), reverse=True)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25824804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档