簡體   English   中英

如何解決 python 中的 KeyError? 檢查下面的代碼

[英]How do i resolve a KeyError in python? check the code below

def myFUNC (e):
  return e["Points"]

team_stats = [
            {"76ers" : {"Wins" : 22,
                       "Losses" : 12,
                       "Points" : 647},
            "Nets" :  {"Wins" : 22,
                       "Losses" : 13,
                       "Points" : 629},
            "Bucks" :  {"Wins" : 21,
                       "Losses" : 13,
                       "Points" : 618}}
              ]
print(team_stats.sort(key=myFUNC))
KeyError: 'Points'

你得到KeyError的原因是因為你試圖從字典的外層訪問鍵"Points" ,它不屬於它,即使它這樣做了,使用當前結構,你不會看到結果有什么不同。

您在list中只有一個dict ,沒有要sort的內容。 如果要對dict進行排序,則只有在使用3.7+時才有可能,因為從3.7開始, 保證 Python 中的dict保持 order 如果您確實滿足版本要求,請使用:

def myFUNC (e):
  return e[1]["Points"]

team_stats = [
            {"76ers" : {"Wins" : 22,
                       "Losses" : 12,
                       "Points" : 647},
            "Nets" :  {"Wins" : 22,
                       "Losses" : 13,
                       "Points" : 629},
            "Bucks" :  {"Wins" : 21,
                       "Losses" : 13,
                       "Points" : 618}}
              ]
result = [dict(sorted(team_stats[0].items(), key=myFUNC))]
print(result)

這使

[{'Bucks': {'Wins': 21, 'Losses': 13, 'Points': 618},
  'Nets': {'Wins': 22, 'Losses': 13, 'Points': 629},
  '76ers': {'Wins': 22, 'Losses': 12, 'Points': 647}}]

如果不滿足版本要求,則需要使用collections.OrderedDict

from collections import OrderedDict
# replace the `result` line with this:
result = [OrderedDict(sorted(team_stats[0].items(), key=myFUNC))]

這使:

[OrderedDict([('Bucks', {'Wins': 21, 'Losses': 13, 'Points': 618}),
              ('Nets', {'Wins': 22, 'Losses': 13, 'Points': 629}),
              ('76ers', {'Wins': 22, 'Losses': 12, 'Points': 647})])]

但我不明白你為什么需要這里的列表。

此外, list().sort()就地修改list ,這不僅在這里沒用,打印它還將返回None

我想你的意思是這可能嗎?

def myFUNC (i):
  return i[1]["Points"]

team_stats =  {"76ers" : {"Wins" : 22,
                       "Losses" : 12,
                       "Points" : 647},
            "Nets" :  {"Wins" : 22,
                       "Losses" : 13,
                       "Points" : 629},
            "Bucks" :  {"Wins" : 21,
                       "Losses" : 13,
                       "Points" : 618}}

print(sorted(team_stats.items(), key=myFUNC))

您按點對每個名稱進行排序。

問題是您在列表中有一個字典,因此當您嘗試對列表進行排序時,它正在查看外部字典,而不是內部字典。

一種解決方案是僅使用字典項,如下所示:

team_stats =     {"76ers" : {"Wins" : 22,
                       "Losses" : 12,
                       "Points" : 647},
            "Nets" :  {"Wins" : 22,
                       "Losses" : 13,
                       "Points" : 629},
            "Bucks" :  {"Wins" : 21,
                       "Losses" : 13,
                       "Points" : 618}}
sorted_teams = list(team_stats.items())  
sorted_teams.sort(key = lambda team : team[1]["Points"])   
# [('Bucks', {'Wins': 21, 'Losses': 13, 'Points': 618}), ('Nets', {'Wins': 22, 'Losses': 13, 'Points': 629}), ('76ers', {'Wins': 22, 'Losses': 12, 'Points': 647})]

如果您將dict存儲在列表之外,則可以非常簡單地對其進行排序。

您還可以通過將sorted()方法包含在dict()中來將 output 保留為dict

team_stats =  {"76ers" : {"Wins" : 22,
                   "Losses" : 12,
                   "Points" : 647},
        "Nets" :  {"Wins" : 22,
                   "Losses" : 13,
                   "Points" : 629},
        "Bucks" :  {"Wins" : 21,
                   "Losses" : 13,
                   "Points" : 618}}

dict(sorted(team_stats.items(), key=lambda x: x[1]['Points']))

#{'Bucks': {'Wins': 21, 'Losses': 13, 'Points': 618}, 'Nets': {'Wins': 22, 'Losses': 13, 'Points': 629}, '76ers': {'Wins': 22, 'Losses': 12, 'Points': 647}}

# in reverse
dict(sorted(team_stats.items(), key=lambda x: x[1]['Points'], reverse=True))
#{'76ers': {'Wins': 22, 'Losses': 12, 'Points': 647}, 'Nets': {'Wins': 22, 'Losses': 13, 'Points': 629}, 'Bucks': {'Wins': 21, 'Losses': 13, 'Points': 618}}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM