Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.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

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中的数组字典进行排序_Python_Sorting_Dictionary - Fatal编程技术网

用元组作为键对python中的数组字典进行排序

用元组作为键对python中的数组字典进行排序,python,sorting,dictionary,Python,Sorting,Dictionary,I使用字符串元组作为键,数组作为值的字典: some_dict = {} some_dict[(A,A)] = [1234, 123] some_dict[(A,B)] = [1235, 13] some_dict[(A,C)] = [12, 12] some_dict[(B,B)] = [12621, 1] ... 我正在将其写入csv文件: for k,v in some_dict.iteritems(): outf.write(k[0]+","+k[1]+","+str(v[0]

I使用字符串元组作为键,数组作为值的字典:

some_dict = {}
some_dict[(A,A)] = [1234, 123]
some_dict[(A,B)] = [1235, 13]
some_dict[(A,C)] = [12, 12]
some_dict[(B,B)] = [12621, 1]
...
我正在将其写入csv文件:

for k,v in some_dict.iteritems():
    outf.write(k[0]+","+k[1]+","+str(v[0])+","str(v[1])+"\n")
输出:

A,A,1234,123
A,B,1235,13
A,C,12,12
B,B,12621,1
我希望在写入文件之前(或之后,只是重写?)根据第一个数字“列”对其进行排序,因此输出应该如下所示:

B,B,12621,1
A,B,1235,13
A,A,1234,123
A,C,12,12
     ^ 
     Sorted on this 'column'

我该怎么做?该文件非常大,因此我认为在编写之前进行此操作会更好。

对字典项进行排序;使用
功能来确定要排序的内容;对于
(键,值)
元组,使用lambda:

sorted_data = sorted(some_dict.iteritems(), key=lambda i: i[1][0], reverse=True)
for (k1, k2), (v1, v2) in sorted_data:
我先使用
reverse=True
来获得更大的值

尽量避免重新发明轮子,有一个非常好的方法可供您使用:

import csv

with open(filename, 'wb') as f:
    writer = csv.writer(f)
    for (k1, k2), (v1, v2) in sorted(some_dict.iteritems(), key=lambda i: i[1][0]):
        writer.writerow([k1, k2, v1, v2])

您也不必显式地将整数转换为字符串。

对字典项进行排序;使用
功能来确定要排序的内容;对于
(键,值)
元组,使用lambda:

sorted_data = sorted(some_dict.iteritems(), key=lambda i: i[1][0], reverse=True)
for (k1, k2), (v1, v2) in sorted_data:
我先使用
reverse=True
来获得更大的值

尽量避免重新发明轮子,有一个非常好的方法可供您使用:

import csv

with open(filename, 'wb') as f:
    writer = csv.writer(f)
    for (k1, k2), (v1, v2) in sorted(some_dict.iteritems(), key=lambda i: i[1][0]):
        writer.writerow([k1, k2, v1, v2])
您也不必显式地将整数转换为字符串。

使用内置项并指定排序所依据的键:

for k,v in sorted(some_dict.iteritems(), key=lambda t: t[1][0]):
    print k,v

#output:
(A, C) [12, 12]
(A, A) [1234, 123]
(A, B) [1235, 13]
(B, B) [12621, 1]
要从大到小排序,只需设置
reverse
关键字参数:

for k,v in sorted(some_dict.iteritems(), key=lambda t: t[1][0], reverse=True):
使用内置项并指定排序所依据的键:

for k,v in sorted(some_dict.iteritems(), key=lambda t: t[1][0]):
    print k,v

#output:
(A, C) [12, 12]
(A, A) [1234, 123]
(A, B) [1235, 13]
(B, B) [12621, 1]
要从大到小排序,只需设置
reverse
关键字参数:

for k,v in sorted(some_dict.iteritems(), key=lambda t: t[1][0], reverse=True):

这太棒了。Sorted会把dict变成一个列表,对吗?@Jeff:
一些dict.iteritems()
会产生一个序列,排序后会变成一个列表,是的。lamda有初学者教程/文档吗?假设我想在第二列排序,或者有三列(string、int、int),我想在int上排序?@Jeff:lambda只是一个用一个表达式创建函数的快捷方式
def anonymous(item):返回项[1][0]
将是等效的函数,只需不命名即可。排序的每个项都由
(键、值)
组成,因此
项[1]
获取值,然后索引到该值中。对于值中的第二列,请使用
项[1][1]
。这很好。Sorted会把dict变成一个列表,对吗?@Jeff:
一些dict.iteritems()
会产生一个序列,排序后会变成一个列表,是的。lamda有初学者教程/文档吗?假设我想在第二列排序,或者有三列(string、int、int),我想在int上排序?@Jeff:lambda只是一个用一个表达式创建函数的快捷方式
def anonymous(item):返回项[1][0]
将是等效的函数,只需不命名即可。排序的每个项都由
(键、值)
组成,因此
项[1]
获取值,然后索引到该值中。对于值中的第二列,请使用
项[1][1]