我正在尝试使用一个函数根据提供给该函数的参数来生成带有一些可变字段的字典。这个想法是尝试多种配置并获得不同的字典。
我已经有一个函数,但它看起来不是pythonic的,而且看起来非常硬。
def build_entry(prefix=None,
field_a=None,
field_b=None,
quantity_a=None,
quantity_b=None,
):
fields = {}
if prefix is not None:
fields['prefix'] = prefix
if field_a is not None:
fields['field_a'] = field_a
if field_b is not None:
fields['field_b'] = field_b
if quantity_a is not None:
fields['quantity_a'] = quantity_a
if quantity_b is not None:
fields['quantity_b'] = quantity_b
return fields
想法是这样调用函数:
fields = build_entry(*config)
Input: [26, 0, None, None, 20]
Output: {'prefix': 26, 'field_a': 0, 'quantity_b': 5}
Input: [20, 5, None, None, None]
Output: {'prefix': 20, 'field_a':5}
Input: [None, None, 0, 5, None]
Output: {'field_b': 0, 'quantity_a':5}
有什么主意如何使这个功能更好或更Python化?还是已经有任何功能可以做到这一点?
我正在使用Python 2.7。
答案 0 :(得分:2)
def build_entry(*values):
keys = ['prefix', 'field_a', 'field_b', 'quantity_a', 'quantity_b']
return { k: v for k, v in zip(keys, values) if v is not None}
然后以相同的方式调用:
In [1]: build_entry(*[26, 0, None, None, 20])
Out[1]: {'prefix': 26, 'field_a': 0, 'quantity_b': 20}
答案 1 :(得分:0)
我认为您想要这样的东西:
def build_entry(**kwargs):
return kwargs
if __name__ == '__main__':
print(build_entry(prefix=1, field_a='a'))
输出:
{'prefix': 1, 'field_a': 'a'}