按值对字典排序,然后将排序的值附加到文本文件

时间:2014-10-05 19:00:11

标签: python sorting file-io dictionary operator-keyword

我在大学读了很短的课程,而现在我正在工作的实验室想要我写一个小程序,它完全在我之上。

我有一个字典,如下所示:

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事件。

2 个答案:

答案 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))