Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Arrays - Fatal编程技术网

Python表分类

Python表分类,python,arrays,Python,Arrays,我有不同类型的数据,例如: 4.5,3.5,U1 4.5,10.5,U2 4.5,6,U1 3.5,10.5,U2 3.5,10.5,U2 5,7,U1 7,6.5,U1 我需要输出: 'U1': [['4.5', '3.5'], ['4.5', '6'], ['5', '7'], ['7', '6.5']] 'U2': [['4.5', '10.5'], ['3.5', '10.5'], ['3.5', '10.5']] 所以我的代码是: import csv reader = csv.

我有不同类型的数据,例如:

4.5,3.5,U1
4.5,10.5,U2
4.5,6,U1
3.5,10.5,U2
3.5,10.5,U2
5,7,U1
7,6.5,U1
我需要输出:

'U1': [['4.5', '3.5'], ['4.5', '6'], ['5', '7'], ['7', '6.5']]
'U2': [['4.5', '10.5'], ['3.5', '10.5'], ['3.5', '10.5']]
所以我的代码是:

import csv

reader = csv.reader(open('test.data', 'r'))
result = {}
for row in reader:
    uclass=row[-1]
    if result.has_key(uclass):
        result[uclass].append([row[0],row[1]])       #--->how can I change from 0 to -2 row ??
    else:
        result[uclass]=[[row[0],row[1]]]             #--->-->how can I change from 0 to -2 row ??
print repr(result)
但是对于任何其他输入数据,我都需要这段代码,因为其中有很多行,而不仅仅是3行

请参见代码中的注释

result[uclass].append(row[:-1])

这个符号叫做。

这可能是什么

data = """\
4.5,3.5,U1
4.5,10.5,U2
4.5,6,U1
3.5,10.5,U2
3.5,10.5,U2
5,7,U1
7,6.5,U1""".splitlines()

from collections import defaultdict
dd = defaultdict(list)
for d in data:
    dl = d.split(',')
    dd[dl[-1]].append(list(map(float, dl[:-1])))

for key in dd:
    print key, dd[key]
印刷品:

U1 [[4.5, 3.5], [4.5, 6.0], [5.0, 7.0], [7.0, 6.5]]
U2 [[4.5, 10.5], [3.5, 10.5], [3.5, 10.5]]

这是你的代码,我做了一些修改

import csv
reader = csv.reader(open('test.data', 'r'))
result = {}
for row in reader:
  #print row
  if(len(row) == 0):
    continue;
  uclass = row[-1]
  if result.has_key(uclass):
    result[uclass].append([row[:-1]])       #--->how can I change from 0 to -2 row ??
  else:
    result[uclass]=[[row[:-1]]]             #--->-->how can I change from 0 to -2 row ??
print repr(result)
我对以下数据进行了测试,它是有效的

5.66,4.5,3.5,U1
4.5,23123,34,10.5,U2
4.5,6,U1
3.5,10.5,U2
3.5,10.5,U2
5,7,U1
7,6.5,U1
4.5,45,73.3,56,66,72.5,U3
导致

U1: [[4.5, 3.5], [4.5, 6.0], [5.0, 7.0], [7.0, 6.5]]
U2: [[4.5, 10.5], [3.5, 10.5], [3.5, 10.5]]
评论:

  • csv.reader需要二进制文件-使用“rb”作为读取模式

  • 切片列表创建列表的新副本;pop没有,因此在时间和内存方面效率更高

  • import csv
    import collections
    
    def main():
        with open('testdata.csv', 'rb') as inf:
            incsv = csv.reader(inf)
            res = collections.defaultdict(list)
            for row in incsv:
                key = row.pop()
                res[key].append([float(r) for r in row])
    
        for key,val in res.iteritems():
            print("{0}: {1}".format(key, val))
    
    if __name__=="__main__":
        main()
    
    U1: [[4.5, 3.5], [4.5, 6.0], [5.0, 7.0], [7.0, 6.5]]
    U2: [[4.5, 10.5], [3.5, 10.5], [3.5, 10.5]]