首页 > 解决方案 > AttributeError:“元组”对象在 Python 3 中没有属性“get”

问题描述

我有两个清单。一名候选人和一张收到的选票。我想按收到的选票对它们进行降序排序。压缩工作正常。当我打印结果列表的类型时,它会作为类“列表”返回。接下来我排序,然后,bam!,得到一个AttributeError: 'tuple' object has no attribute get. 我不知道如何解决这个问题,希望得到指导。

for i in range(len(uniquecandidate)):
    result = zip(uniquecandidate, votes) # zips two lists together  

result_list = list(result)
print(type(result_list))   # returns <class 'list'>

result_list.sort(key=lambda x: x.get('votes'), reverse=True) #sort by vote number

print(result_list, end='\n\n')
                                                   

代码和错误

标签: python-3.xsortinggettuplesnamedtuple

解决方案


zip返回一个元组列表;您可以通过使用索引访问元素来对它们进行排序:

result_list.sort(key=lambda x: x[1], reverse=True)

如果您想更明确,可以使用collections.namedtuple, 并通过属性名称上的点符号访问元素:

from collections import namedtuple


Poll = namedtuple('Poll', ['candidate', 'numvotes'])

uniquecandidate = ['a', 'b', 'c', 'd']
votes = [3, 4, 7, 1]

poll_results = list(map(Poll, uniquecandidate, votes))
poll_results.sort(key=lambda x: x.numvotes, reverse=True)

print(poll_results)

或与typing.NamedTuple

from typing import NamedTuple

class Poll(NamedTuple):
    candidate: str
    numvotes: int

uniquecandidate = ['a', 'b', 'c', 'd']
votes = [3, 4, 7, 1]

poll_results = list(map(Poll, uniquecandidate, votes))
poll_results.sort(key=lambda x: x.numvotes, reverse=True)

print(poll_results)

出去:

[Poll(candidate='c', numvotes=7), Poll(candidate='b', numvotes=4), Poll(candidate='a', numvotes=3), Poll(candidate='d', numvotes=1)]

推荐阅读