【问题标题】:Sort dictionary by value then append the sorted values to a text file按值对字典进行排序,然后将排序后的值附加到文本文件中
【发布时间】:2014-10-05 19:00:10
【问题描述】:

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

我有一本像这样的字典:

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 的东西。

【问题讨论】:

  • 添加x2 和你期望的输出

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


【解决方案1】:

假设你有你的字典

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

你可以使用下面的表达式

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

这将生成tuple 中的list,按字典中的值排序。

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

然后写入文件

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

【讨论】:

  • 密钥必须存在......我正在迭代密钥。我误解了OP的问题吗?钥匙又是从哪里来的?
  • 嗨,谢谢,但还是给了我这个 ('AGTGCAATGATGAAAGGGCAT', '1'), ('CAGTGCGATGATGAAAGGGCAT', '1'), ('CAGTGCAATGATGAAAGGGCTT', '1'), ('AGTGCAATGATGAAAGGGCATA' , '1'), ('CAGTGCAATGATGAAAAGGCA', '1'), ('CAGTGCAATGATGAAAGGGCATA', '13'), ('CAGTGCAATGATGAAAGGGC', '15'), ('CAGTGCAATGATGAAAGGG', '2'), ('CAGTGCAATGATGAAAGGGCAC' , '2'), ('CAGTGCAATGTTGAAAGGGCA', '2'), ('CAGTGCAATGATAAAAGGGCA', '2'), ('CAGTGCAATGATAAAAGGGC', '2'), ('CAGTGCAATGTTGAAAGGGCAT', '2'), ('CAGTGCAATGAAAGGGCATT' , '35') 所以你看到问题了吗?
【解决方案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))

【讨论】:

  • 嗨,很抱歉回复晚了,我想如果有人回复帖子我会收到一封电子邮件。我试过了,但我仍然遇到仅按第一个整数排序的原始问题。
  • @pancakefacecake,theo 代码按值排序,我看不出它是如何工作的,请添加您实际 dict 的一部分
  • 嗨,我将 dict 值从字符串转换为浮点数。现在它完美地工作了。现在来征服对 csv 的写入,cheeeers
猜你喜欢
  • 2012-04-12
  • 1970-01-01
  • 2015-04-06
  • 1970-01-01
  • 2014-01-18
  • 1970-01-01
相关资源
最近更新 更多