我在大学读了很短的课程,而现在我正在工作的实验室想要我写一个小程序,它完全在我之上。
我有一个字典,如下所示:
AAAAAAAAAAAAAAAA 1
AAAAAAAAAAAAAAAAA 2
AAAAAAAAAAAAAAAAAA 3
AAAAAAAAAAAAAAAAAAA 2 etc...
字母是键和数字值。 我使用此代码将其与列表进行比较以提取特定键。
x2 = dict((option, d[option]) for option in x if option in d)
哪种方法正常。
然后我用它来按值排序。
sorted_x2 = sorted(x2.items(), key=operator.itemgetter(0))
只能按键的第一个整数对它进行排序,所以排序就像这样
1,1,1 1, 13, 15, 2, 21, 24, 3, etc.. which is not useful
我不知道如何改变这一点。然后我还需要将sorted_x2写入文件,最好每个文件在一个单独的行上。但我不知道如何处理sorted_x2事件。
答案 0 :(得分:1)
说你有你的字典
d = {'AAAAAAAAAAAAAAAA':1,
'AAAAAAAAAAAAAAAAA':2,
'AAAAAAAAAAAAAAAAAA':3,
'AAAAAAAAAAAAAAAAAAA':2}
您可以使用以下表达式
l = sorted([(k, d[k]) for k in d], key = lambda i: i[1])
这将生成list
tuple
,按字典中的值排序。
[('AAAAAAAAAAAAAAAA', 1),
('AAAAAAAAAAAAAAAAA', 2),
('AAAAAAAAAAAAAAAAAAA', 2),
('AAAAAAAAAAAAAAAAAA', 3)]
然后写入文件
import csv
with open('file.txt', 'w') as f:
csvF = csv.writer(f)
csvF.writerows(l)
答案 1 :(得分:0)
您使用itemgetter(0)
按键不排序,需要itemgetter(1)
:
d = {"AAAAAAAAAAAAAAAA" :1,
"AAAAAAAAAAAAAAAAA" :2,
"AAAAAAAAAAAAAAAAAA" :3,
"AAAAAAAAAAAAAAAAAAA":2,
"AAAAAAAAAAAAAAA":22 }
sorted(d.items(), key=operator.itemgetter(1))
[('AAAAAAAAAAAAAAAA', 1), ('AAAAAAAAAAAAAAAAA', 2), ('AAAAAAAAAAAAAAAAAAA', 2), ('AAAAAAAAAAAAAAAAAA', 3), ('AAAAAAAAAAAAAAA', 22)]
with open("out.txt","w") as f:
for line in srtd:
f.write("{}\n".format(line))