Python 3.4.3 - List没有要获取的属性

时间:2015-08-28 14:38:31

标签: python sorting python-3.4

我有一个包含字母和整数的文本文件列表。例如,

Aaa = 10
Bbb = 5
Ccc = 9
Ddd = 1

我想显示按整数排列从最高到最低的列表,所以我使用了:

 with open('score.txt') as infile:
     myDict=list(infile)
     infile = sorted(myDict, key=myDict.get, reverse=True)
     print(infile)

但我一直收到此错误:AttributeError: 'list' object has no attribute 'get'

我知道这是因为我使用的列表功能,但是没有它,我得到了这个:

AttributeError: '_io.TextIOWrapper' object has no attribute 'get'

2 个答案:

答案 0 :(得分:1)

list()上拨打str将分别返回每个字符。

请参阅:

>>> f = """ Aaa = 10
... Bbb = 5
... Ccc = 9
... Ddd = 1"""
>>> list(f)
[' ', 'A', 'a', 'a', ' ', '=', ' ', '1', '0', '\n', 'B', 'b', 'b', ' ', '=', ' '
, '5', '\n', 'C', 'c', 'c', ' ', '=', ' ', '9', '\n', 'D', 'd', 'd', ' ', '=', '
 ', '1']

对于您尝试做的事情,我建议您使用其他方法拆分字符串。

在此示例中,我使用str.splitlines(),后跟str.split(sep='=')

>>> f = """Aaa = 10
Bbb = 5
Ccc = 9
Ddd = 1"""
>>> for entry in f.splitlines():
    print(entry.split('='))


['Aaa ', ' 10']
['Bbb ', ' 5']
['Ccc ', ' 9']
['Ddd ', ' 1']
>>> 

请点击此处了解详情:https://docs.python.org/3/library/stdtypes.html#str.split

或者你可以通过循环遍历角色来自己建立一个字典,但无论如何这对我来说似乎有点太多了。

修改:

我应该提一下,一旦你有办法正确地查看数据,排序就不会太难。让我们说,在那里使用我的例子,你设法循环数据并将其存储为列表列表,即:

f = """ aaa = 100
nnn = 222
qfj = 203 """

scores = []
for line in f.splitlines():
    scores.append(line.split(sep='='))

def get_score(l):
    return int(l[1])

print(sorted(scores, key=get_score, reverse=True))

您也可以使用lambda函数,但这更容易理解。

关键参数在这里是必不可少的,因为它允许排序函数查看它尝试排序的内容。它将迭代分数,并在每次迭代时将密钥作为函数调用。

也许考虑实施自己的排序算法,你可能会学到很多东西。

答案 1 :(得分:0)

tups = [(l.split('=')[0],int(l.split('=')[1])) for l in open('score.txt').read().strip().split('\n')]
tups = sorted(dd,key=lambda x: x[1],reverse=True)
for t in tups:
    print '{} : {}'.format(*t)