我有一个包含字母和整数的文本文件列表。例如,
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'
答案 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)