生成带有可选字段的字典的函数

时间:2019-04-15 16:16:23

标签: python dictionary

我正在尝试使用一个函数根据提供给该函数的参数来生成带有一些可变字段的字典。这个想法是尝试多种配置并获得不同的字典。

我已经有一个函数,但它看起来不是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。

2 个答案:

答案 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'}