Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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 CSV模块排序输出意外_Python_Sorting_Csv - Fatal编程技术网

Python CSV模块排序输出意外

Python CSV模块排序输出意外,python,sorting,csv,Python,Sorting,Csv,在下面的代码中(用于按降序打印工资,按专业排序) 当我在条件语句中加入“水管工”时,水管工工资的输出结果是: Tokyo,400 Delhi,300 London,100 当我将“律师”置于相同的“如果”条件下时,输出为: Tokyo,800 London,700 Delhi,400 CSV的内容如下: City,Job,Salary Delhi,Lawyers,400 Delhi,Plumbers,300 London,Lawyers,700 London,Plumbers,100 T

在下面的代码中(用于按降序打印工资,按专业排序)

当我在条件语句中加入“水管工”时,水管工工资的输出结果是:

Tokyo,400 
Delhi,300 
London,100
当我将“律师”置于相同的“如果”条件下时,输出为:

Tokyo,800
London,700
Delhi,400
CSV的内容如下:

City,Job,Salary
Delhi,Lawyers,400
Delhi,Plumbers,300
London,Lawyers,700
London,Plumbers,100
Tokyo,Lawyers,800
Tokyo,Plumbers,400

当我删除-->if行[i].values()[2]='Plumbers':首先,将所有索引重置为索引-1,与当前的
行[i]相同。除非
DictReader
是基于1的索引系统,否则values()[2]
不能等于
Plumbers

其次,您希望输出的第一行的
Tokyo
和第三行的
Tokyo
有什么独特之处?创建dict时,使用与键相同的值将导致覆盖以前与该键关联的内容。您需要某种唯一标识符,例如密钥的
Location.Profession
。您只需执行以下操作即可获得一个将保留所有信息的密钥:

key = "".join([rows[i].values()[0], rows[i].values()[1]], sep=",")

首先,将所有索引重置为索引-1,当前为
行[i]。除非
DictReader
是基于1的索引系统,否则values()[2]
不能等于
水管工

其次,您希望输出的第一行的
Tokyo
和第三行的
Tokyo
有什么独特之处?创建dict时,使用与键相同的值将导致覆盖以前与该键关联的内容。您需要某种唯一标识符,例如密钥的
Location.Profession
。您只需执行以下操作即可获得一个将保留所有信息的密钥:

key = "".join([rows[i].values()[0], rows[i].values()[1]], sep=",")

首先,您的代码的工作方式如下所述。。。按降薪顺序输出。那么,它是否按设计工作

顺便说一下,您的排序代码似乎过于复杂。您不需要将位置/薪资对拆分为两个列表并对其进行独立排序。例如:

# Plumbers
>>> a
{'Delhi': '300', 'London': '100', 'Tokyo': '400'}
>>> [item for item in reversed(sorted(a.iteritems(),key=operator.itemgetter(1)))]
[('Tokyo', '400'), ('Delhi', '300'), ('London', '100')]

# Lawyers
>>> a
{'Delhi': '400', 'London': '700', 'Tokyo': '800'}
>>> [item for item in reversed(sorted(a.iteritems(),key=operator.itemgetter(1)))]
[('Tokyo', '800'), ('London', '700'), ('Delhi', '400')]

为了回答您的最后一个问题,当您删除“if”语句时:您正在字典中存储位置与薪资,并且字典不能有重复的键。它将包含每个位置的最新更新,它基于您的输入csv,是管道工的工资

首先,您的代码的工作方式如下所述。。。按降薪顺序输出。那么,它是否按设计工作

顺便说一下,您的排序代码似乎过于复杂。您不需要将位置/薪资对拆分为两个列表并对其进行独立排序。例如:

# Plumbers
>>> a
{'Delhi': '300', 'London': '100', 'Tokyo': '400'}
>>> [item for item in reversed(sorted(a.iteritems(),key=operator.itemgetter(1)))]
[('Tokyo', '400'), ('Delhi', '300'), ('London', '100')]

# Lawyers
>>> a
{'Delhi': '400', 'London': '700', 'Tokyo': '800'}
>>> [item for item in reversed(sorted(a.iteritems(),key=operator.itemgetter(1)))]
[('Tokyo', '800'), ('London', '700'), ('Delhi', '400')]

为了回答您的最后一个问题,当您删除“if”语句时:您正在字典中存储位置与薪资,并且字典不能有重复的键。它将包含每个位置的最新更新,它基于您的输入csv,是管道工的工资

对不起,问题出在哪里?两个输出都按降序排列。@isedev ok。首先,谢谢你解决了这个问题。还有一个疑问:当在远程服务器上编译相同的代码时,我发现这个错误->全局名称“a”不是定义的,这听起来不太可能。。。你确定没有打字错误、剪切粘贴错误、相同的python版本等吗?我确信我没有打字错误。语法错误等。。可能是python版本。但是,我想知道在Python3中会有什么变化导致了这个错误?(我使用了2.7,可能服务器包含3.0。我不知道…)只是在Python 3.2上尝试过。上面的代码导致了很多问题,但与未定义的“a”无关:)对不起,问题出在哪里?两个输出都按降序排列。@isedev ok。首先,谢谢你解决了这个问题。还有一个疑问:当在远程服务器上编译相同的代码时,我发现这个错误->全局名称“a”不是定义的,这听起来不太可能。。。你确定没有打字错误、剪切粘贴错误、相同的python版本等吗?我确信我没有打字错误。语法错误等。。可能是python版本。但是,我想知道在Python3中会有什么变化导致了这个错误?(我使用了2.7,可能服务器包含3.0。我不知道…)只是在Python 3.2上尝试过。上面的代码导致了很多问题,但与未定义的“a”无关:)使用
.values()[some\u integer]
是危险的,因为字典没有排序:例如,无法保证您将获得位于0的位置。其次,您可以使用元组而不是字符串键,例如
(第['City',第['professional'])
。使用
.values()[some_integer]
是危险的,因为字典没有顺序:例如,无法保证您将获得0处的位置。其次,您可以使用元组而不是字符串键,如
(第['City',第['professional]行)
# Plumbers
>>> a
{'Delhi': '300', 'London': '100', 'Tokyo': '400'}
>>> [item for item in reversed(sorted(a.iteritems(),key=operator.itemgetter(1)))]
[('Tokyo', '400'), ('Delhi', '300'), ('London', '100')]

# Lawyers
>>> a
{'Delhi': '400', 'London': '700', 'Tokyo': '800'}
>>> [item for item in reversed(sorted(a.iteritems(),key=operator.itemgetter(1)))]
[('Tokyo', '800'), ('London', '700'), ('Delhi', '400')]