繁体   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