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

2024-04-25 09:02:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我在大学修了一门很短的课程,现在我的实验室想让我写一个小程序,它完全凌驾于我之上。你知道吗

我有一本字典,看起来像这样:

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

我不知道怎么改变这个。然后,我还需要将排序后的\ux2写入文件,最好将每个文件放在单独的一行中。但我不知道怎么处理这件事。你知道吗


Tags: 文件in程序字典排序etc实验室大学
2条回答

您是按键排序,而不是按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))

假设你有你的字典

d = {'AAAAAAAAAAAAAAAA':1,
     'AAAAAAAAAAAAAAAAA':2, 
     'AAAAAAAAAAAAAAAAAA':3, 
     'AAAAAAAAAAAAAAAAAAA':2}

你可以用下面的表达式

l = sorted([(k, d[k]) for k in d], key = lambda i: i[1])

这将产生一个listtuple,按字典中的值排序。你知道吗

[('AAAAAAAAAAAAAAAA', 1),
 ('AAAAAAAAAAAAAAAAA', 2),
 ('AAAAAAAAAAAAAAAAAAA', 2),
 ('AAAAAAAAAAAAAAAAAA', 3)]

然后写入文件

import csv
with open('file.txt', 'w') as f:
    csvF = csv.writer(f)
    csvF.writerows(l)

相关问题 更多 >