亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 2D 列表到 dict 時要解壓的值太多(預期為 2)?(Python)

從 2D 列表到 dict 時要解壓的值太多(預期為 2)?(Python)

慕碼人8056858 2023-03-30 17:25:36
我有一個包含 2 個項目列表的列表,如下所示:list_of_parsed_rows =[['ADP:', 'Round: 1, Pick: 2'], ['Team:', 'Carolina Panthers'], ['Ht / Wt:', '5\'11" / 202 lb.'], ['College:', 'Stanford'], ['Age:', '24'], ['Born:', 'June 7, 1996'], ['Drafted:', '2017 /\n\nRd. 1 (8)'], ['Draft Team:', 'CAR'], ['Saquon Barkley', 'RB', 'NYG', '1.02'], ['Ezekiel Elliott', 'RB', 'DAL', '1.04'], ['Derrick Henry', 'RB', 'TEN', '1.04'], ['Dalvin Cook', 'RB', 'MIN', '1.05'], ['Alvin Kamara', 'RB', 'NO', '1.06'], ['Michael Thomas', 'WR', 'NO', '1.08'], ['Josh Jacobs', 'RB', 'LV', '1.08'], ['Nick Chubb', 'RB', 'CLE', '1.09'], ['Aaron Jones', 'RB', 'GB', '1.10'], ['Tyreek Hill', 'WR', 'KC', '1.11'], ['Joe Mixon', 'RB', 'CIN', '1.11'], ['Pat Mahomes', 'QB', 'KC', '2.01'], ['Davante Adams', 'WR', 'GB', '2.01'], ['DeAndre Hopkins', 'WR', 'ARI', '2.02'], ['Miles Sanders', 'RB', 'PHI', '2.03']]我正試圖用以下內容將它變成一個字典dict_of_parsed_rows = {key: value for key, value in list_of_parsed_rows}但我收到以下錯誤消息:ValueError: too many values to unpack (expected 2)知道發生了什么嗎?奇怪的是,這是一本書中問題的確切解決方案,我很驚訝它是不正確的。
查看完整描述

4 回答

?
烙印99

TA貢獻1829條經驗 獲得超13個贊

你不能像這樣對 dict 使用列表理解。Python 不理解您的意思list[0]是鍵和list[1]值。但是你可以用一個循環來完成。


list_of_parsed_rows = [['ADP:', 'Round: 1, Pick: 2'],

 ['Team:', 'Carolina Panthers'],

 ['Ht / Wt:', '5\'11" / 202 lb.'],

 ['College:', 'Stanford'],

 ['Age:', '24'],

 ['Born:', 'June 7, 1996'],

 ['Drafted:', '2017 /\n\nRd. 1 (8)'],

 ['Draft Team:', 'CAR'],

 ['Saquon Barkley', 'RB', 'NYG', '1.02'],

 ['Ezekiel Elliott', 'RB', 'DAL', '1.04'],

 ['Derrick Henry', 'RB', 'TEN', '1.04'],

 ['Dalvin Cook', 'RB', 'MIN', '1.05'],

 ['Alvin Kamara', 'RB', 'NO', '1.06'],

 ['Michael Thomas', 'WR', 'NO', '1.08'],

 ['Josh Jacobs', 'RB', 'LV', '1.08'],

 ['Nick Chubb', 'RB', 'CLE', '1.09'],

 ['Aaron Jones', 'RB', 'GB', '1.10'],

 ['Tyreek Hill', 'WR', 'KC', '1.11'],

 ['Joe Mixon', 'RB', 'CIN', '1.11'],

 ['Pat Mahomes', 'QB', 'KC', '2.01'],

 ['Davante Adams', 'WR', 'GB', '2.01'],

 ['DeAndre Hopkins', 'WR', 'ARI', '2.02'],

 ['Miles Sanders', 'RB', 'PHI', '2.03']]


dict_of_parsed_rows = dict()


for elem in list_of_parsed_rows:

    dict_of_parsed_rows[elem[0]] = elem[1:]


print(dict_of_parsed_rows)


查看完整回答
反對 回復 2023-03-30
?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

您可以在列表理解中使用過濾器來忽略除 2 項以外的列表:

dict_of_parsed_rows = dict([l for l in list_of_parsed_rows if len(l) == 2])


查看完整回答
反對 回復 2023-03-30
?
忽然笑

TA貢獻1806條經驗 獲得超5個贊

您正在遍歷嵌套列表并且內部列表的長度不同。因此,python 無法解壓很多值。


假設希望第一個元素為key,其余元素為value,則需要將剩余元素拼接成一個字符串


In [2]: list_of_parsed_rows =[['ADP:', 'Round: 1, Pick: 2'],

   ...:  ['Team:', 'Carolina Panthers'],

   ...:  ['Ht / Wt:', '5\'11" / 202 lb.'],

   ...:  ['College:', 'Stanford'],

   ...:  ['Age:', '24'],

   ...:  ['Born:', 'June 7, 1996'],

   ...:  ['Drafted:', '2017 /\n\nRd. 1 (8)'],

   ...:  ['Draft Team:', 'CAR'],

   ...:  ['Saquon Barkley', 'RB', 'NYG', '1.02'],

   ...:  ['Ezekiel Elliott', 'RB', 'DAL', '1.04'],

   ...:  ['Derrick Henry', 'RB', 'TEN', '1.04'],

   ...:  ['Dalvin Cook', 'RB', 'MIN', '1.05'],

   ...:  ['Alvin Kamara', 'RB', 'NO', '1.06'],

   ...:  ['Michael Thomas', 'WR', 'NO', '1.08'],

   ...:  ['Josh Jacobs', 'RB', 'LV', '1.08'],

   ...:  ['Nick Chubb', 'RB', 'CLE', '1.09'],

   ...:  ['Aaron Jones', 'RB', 'GB', '1.10'],

   ...:  ['Tyreek Hill', 'WR', 'KC', '1.11'],

   ...:  ['Joe Mixon', 'RB', 'CIN', '1.11'],

   ...:  ['Pat Mahomes', 'QB', 'KC', '2.01'],

   ...:  ['Davante Adams', 'WR', 'GB', '2.01'],

   ...:  ['DeAndre Hopkins', 'WR', 'ARI', '2.02'],

   ...:  ['Miles Sanders', 'RB', 'PHI', '2.03']]


In [3]: dict_of_parsed_rows = {innerlist[0]:",".join(innerlist[1:]) for innerlist in list_of_parsed_rows}


In [4]: dict_of_parsed_rows

Out[4]:

{'ADP:': 'Round: 1, Pick: 2',

 'Team:': 'Carolina Panthers',

 'Ht / Wt:': '5\'11" / 202 lb.',

 'College:': 'Stanford',

 'Age:': '24',

 'Born:': 'June 7, 1996',

 'Drafted:': '2017 /\n\nRd. 1 (8)',

 'Draft Team:': 'CAR',

 'Saquon Barkley': 'RB,NYG,1.02',

 'Ezekiel Elliott': 'RB,DAL,1.04',

 'Derrick Henry': 'RB,TEN,1.04',

 'Dalvin Cook': 'RB,MIN,1.05',

 'Alvin Kamara': 'RB,NO,1.06',

 'Michael Thomas': 'WR,NO,1.08',

 'Josh Jacobs': 'RB,LV,1.08',

 'Nick Chubb': 'RB,CLE,1.09',

 'Aaron Jones': 'RB,GB,1.10',

 'Tyreek Hill': 'WR,KC,1.11',

 'Joe Mixon': 'RB,CIN,1.11',

 'Pat Mahomes': 'QB,KC,2.01',

 'Davante Adams': 'WR,GB,2.01',

 'DeAndre Hopkins': 'WR,ARI,2.02',

 'Miles Sanders': 'RB,PHI,2.03'}

如果您希望第二個元素是值


dict_of_parsed_rows = {key: value for key,value, *k in list_of_parsed_rows}


查看完整回答
反對 回復 2023-03-30
?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

在示例中,沒有定義value當有超過 2 個項目時會是什么,例如:

['Saquon Barkley', 'RB', 'NYG', '1.02'],

如果您想保留第一個元素(例如'Saquon Barkley')作為鍵并將其余值組合到一個list(例如['RB', 'NYG', '1.02'])中并用作您的value,一個簡單的解決方法是使用解包運算符 ( *):

dict_of_parsed_rows = {key: value for key, *value in list_of_parsed_rows}


查看完整回答
反對 回復 2023-03-30
  • 4 回答
  • 0 關注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號