python字典默认值

python字典默认值,python,dictionary,default,default-value,Python,Dictionary,Default,Default Value,有一个代码-它可以工作。但我不知道在这种情况下是否可以使用“try-except” row = [('Normal', 'Deck1', 'user1', 'Deck2', 'Win', '2:0'), ('Normal', 'Deck3', 'user2', 'Deck2', 'Loss', '1:2'), ('Normal', 'Deck3', 'user3', 'Deck1', 'Draw', '2:2')] table = 'win_loss' result = ['Win', 'Los

有一个代码-它可以工作。但我不知道在这种情况下是否可以使用“try-except”

row = [('Normal', 'Deck1', 'user1', 'Deck2', 'Win', '2:0'), ('Normal', 'Deck3', 'user2', 'Deck2', 'Loss', '1:2'), ('Normal', 'Deck3', 'user3', 'Deck1', 'Draw', '2:2')]
table = 'win_loss'
result = ['Win', 'Loss' , 'Draw']
deck = ['Deck1','Deck2','Deck3','Deck4']

def pivot(row):
  title, pos = [result, -2] if table == 'win_loss' else [deck, 3]
  upd = {}
  for i in row:
    try:
      upd[i[1]]
    except KeyError:
      upd[i[1]] = {}
    try:
      upd[i[1]][i[pos]]
    except KeyError:
      upd[i[1]][i[pos]] = 0
    upd[i[1]][i[pos]] += 1
  return upd
  
print(pivot(row))
#{'Deck1': {'Win': 1}, 'Deck3': {'Loss': 1, 'Draw': 1}}
有一个不带“try except”的选项,但这会在字典的第二级保留空值。我不知道该怎么移除它们了

def pivot(row):
  title, pos = [result, -2] if table == 'win_loss' else [deck, 3]
  upd = {fr:{t:0 for t in title} for fr in deck}
  for i in row:
    upd[i[1]][i[pos]] += 1
#{'Deck1': {'Win': 1, 'Loss': 0, 'Draw': 0}, 'Deck2': {'Win': 0, 'Loss': 0, 'Draw': 0}, 'Deck3': {'Win': 0, 'Loss': 1, 'Draw': 1}, 'Deck4': {'Win': 0, 'Loss': 0, 'Draw': 0}}
  copy_upd = upd.copy()
  for key in copy_upd:
    if sum(copy_upd[key].values()) == 0:
      del upd[key]
  return upd
  #{'Deck1': {'Win': 1, 'Loss': 0, 'Draw': 0}, 'Deck3': {'Win': 0, 'Loss': 1, 'Draw': 1}}

print(pivot(row))
可以删除空值吗?或者如何为字典中没有的键设置默认值?

谢谢链接

def枢轴(行):
从集合导入defaultdict
标题,位置=[结果,-2]如果表格='输赢'其他[牌组,3]
upd=defaultdict(lambda:defaultdict(int))
对于第i行:
upd[i[1]][i[pos]]+=1
返回upd
#defaultdict(,{'Deck1':defaultdict(,{'Win':1}),'Deck3':defaultdict(,{'Loss':1,'Draw':1})

没有空值?如果您使用更具描述性的名称,它将真正帮助所有人@我正在为此尽我最大的努力,但我的英语老师是谷歌翻译不用担心,我希望一切顺利!PEP 8的这一部分可以很好地翻译
def pivot(row):
  from collections import defaultdict
  title, pos = [result, -2] if table == 'win_loss' else [deck, 3]
  upd = defaultdict(lambda: defaultdict(int))
  for i in row:
    upd[i[1]][i[pos]] += 1
  return upd
  #defaultdict(<function pivot.<locals>.<lambda> at 0x7f05740dc940>, {'Deck1': defaultdict(<class 'int'>, {'Win': 1}), 'Deck3': defaultdict(<class 'int'>, {'Loss': 1, 'Draw': 1})})