AttributeError: 'tuple' object has no attribute 'get' in Python 3
AttributeError: 'tuple' object has no attribute 'get' in Python 3
我有两个列表。一名候选人和一张收到的选票。我想按收到的票数降序排列。压缩工作正常。当我打印结果列表的类型时,它返回为 class 'list'。接下来我排序,砰!,得到一个 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')
因为您的候选人和选票存储在元组对象中,所以 get() 方法无法像在字典中那样对它们起作用。我建议从
切换
x.get('votes')
对此:
x[1]
这将获得每个元组的索引 1(在您的情况下是投票计数)。
zip
returns 元组列表;您可以通过使用索引访问元素来对它们进行排序:
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)]
我有两个列表。一名候选人和一张收到的选票。我想按收到的票数降序排列。压缩工作正常。当我打印结果列表的类型时,它返回为 class 'list'。接下来我排序,砰!,得到一个 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')
因为您的候选人和选票存储在元组对象中,所以 get() 方法无法像在字典中那样对它们起作用。我建议从
切换x.get('votes')
对此:
x[1]
这将获得每个元组的索引 1(在您的情况下是投票计数)。
zip
returns 元组列表;您可以通过使用索引访问元素来对它们进行排序:
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)]