【发布时间】:2019-02-22 07:16:09
【问题描述】:
我有以下问题:我想提供一个简单的函数,它遍历参数集列表并对所有参数集执行相同的操作。这个想法是将标量值或任何可迭代的值作为 kwarg 传递给函数,然后生成每组 kwarg,然后对它们调用操作。
def simple_function(**kwargs):
list_of_kwargs = convert_kwargs(kwargs)
return [my_action(**kwargs_set) for kwargs_set in list_of_kwargs]
因此,我发现很难将convert_kwargs 实现为高效和通用的。我需要完成的一些示例测试用例:
class ConvertParamsTestCase(unittest.TestCase):
def test_convert_kwargs_no_list(self):
kwargs = {'arg1': 1, 'arg2': "string", 'arg3': None}
self.assertDictEqual(kwargs, convert_kwargs(kwargs))
def test_convert_kwargs_all_lists(self):
kwargs = {'arg1': [1, 2], 'arg2': ["string", "str"], 'arg3': [None, None]}
expected = [{'arg1': 1, 'arg2': "string", 'arg3': None}, {'arg1': 2, 'arg2': "str", 'arg3': None}]
self.assertListEqual(expected, convert_kwargs(kwargs))
def test_convert_kwargs_one_is_string(self):
kwargs = {'arg1': [1, 2], 'arg2': "string", 'arg3': [None, None]}
expected = [{'arg1': 1, 'arg2': "string", 'arg3': None}, {'arg1': 2, 'arg2': "string", 'arg3': None}]
self.assertListEqual(expected, convert_kwargs(kwargs))
def test_convert_kwargs_one_is_iterator(self):
kwargs = {'arg1': range(1, 3), 'arg2': "string", 'arg3': [None, None]}
expected = [{'arg1': 1, 'arg2': "string", 'arg3': None}, {'arg1': 2, 'arg2': "string", 'arg3': None}]
self.assertListEqual(expected, convert_kwargs(kwargs))
我已经检查过了,但没有成功: list of dicts to/from dict of lists
我的主要问题是:
- 字符串是可迭代的
- 我无法仅通过评估来检查生成器的长度
如果有任何想法,我将不胜感激!
【问题讨论】:
标签: python python-3.x