簡體   English   中英

Python在kwargs中解包列表值

[英]Python unpacking list value in kwargs

我有這樣的字典列表。

rows = [
{'user': staff_user, 'grade': [u'0.0', u'N/A', u'N/A', u'N/A', u'N/A']},
{'user': non_staff_user, 'grade': [u'0.0', u'N/A', u'N/A', u'N/A', u'N/A']},
]
for row in rows:    
    expected_row = get_expected_rows(**row)



  def get_expected_rows(user, grade):
     #Here i want to list `grade` to be unpacked.
    dict(zip(
        ['username', 'email', 'total', 'sub1grade', 'sub2grade', sub3grade, sub4grade],
        user.username,
        user.email,
        grade #I want this unpacked
    ))

如何使用該方法解開grade 想法?

您做錯了。 為了在壓縮后創建字典,您需要提供兩個要壓縮的列表,第一個列表是鍵的列表,第二個列表是值的列表。 您已經創建了鍵列表,現在需要創建值列表。

這是因為dict()函數需要一個可迭代的函數,該函數可生成兩個元素(或元素的映射或另一個字典)的元組,其中第一個元素是鍵,第二個元素是值。 因此,可以通過壓縮兩個列表之一的鍵和另一個值的鍵來實現。 壓縮時, zip()將從相應的索引中獲取元素,並生成兩個元素的元組。

范例-

def get_expected_rows(user, grade):
    #Here i want to list `grade` to be unpacked.
    return dict(zip(
        ['username', 'email', 'total', 'sub1grade', 'sub2grade', sub3grade, sub4grade],
        [ user.username, user.email ] + grade))

演示-

>>> rows = [
... {'user': 'staff_user', 'grade': [u'0.0', u'N/A', u'N/A', u'N/A', u'N/A']},
... {'user': 'non_staff_user', 'grade': [u'0.0', u'N/A', u'N/A', u'N/A', u'N/A']}]
>>> def get_expected_rows(user, grade):
...     #Here i want to list `grade` to be unpacked.
...     return dict(zip(
...         ['username', 'total', 'sub1grade', 'sub2grade', 'sub3grade', 'sub4grade'],
...         [user] + grade
...     ))
...
>>>
>>> for row in rows:
...     expected_row = get_expected_rows(**row)
...     print(expected_row)
...
{'sub1grade': 'N/A', 'sub3grade': 'N/A', 'sub4grade': 'N/A', 'sub2grade': 'N/A', 'username': 'staff_user', 'total': '0.0'}
{'sub1grade': 'N/A', 'sub3grade': 'N/A', 'sub4grade': 'N/A', 'sub2grade': 'N/A', 'username': 'non_staff_user', 'total': '0.0'}

請注意,您代碼中的另一個潛在問題是,-

expected_row = get_expected_rows(**row)

expected_row在每次迭代中覆蓋Expected_row,因此在迭代結束時,它只會是最后row的預期行。 如果您要創建預期行的列表,則應該-

expected_rows = []
for row in rows:    
    expected_rows.append(get_expected_rows(**row))

或列表理解選項-

expected_rows = [get_expected_rows(**row) for row in rows]

暫無
暫無

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

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