将字典列表扩展为格式化字符串列表的方法

时间:2016-05-09 20:55:55

标签: python

我需要使用子进程模块调用外部可执行文件。一切都很好,但是我想改进我生成命令行参数的方式。

可执行文件的命令行选项需要格式化如下:     --argname = argvalue

我目前有一个字典列表如下:     [{ARG1:VALUE1},{ARG2:VALUE2}]

将这些词典扩展为正确的字符串格式的最佳方法是什么?我目前正在迭代列表,附加到不同的列表,但是我觉得我应该使用更加pythonic的方法。

4 个答案:

答案 0 :(得分:1)

http://docs.quantifiedcode.com/python-code-patterns/readability/not_using_items_to_iterate_over_a_dictionary.html

中使用items()
for key,val in d.items():
    print("{} = {}".format(key, val))

答案 1 :(得分:1)

' '.join('--{key}={value}'.format(key = k, value = v) for d in arg_list for k, v in d.items())

本质上,这会迭代列表中的每个字典(for d in arg_list),然后遍历每个字典中的项目(for k, v in d.items())。每个项目都被格式化为正确的形式,然后组合所有这些键值对。

相当于:

arg_list = [{arg1:value1},{arg2:value2}]
formatted_args = []

for d in arg_list:
    for k, v in d.items():
        # Format each item per dictionary
        formatted_args.append('--{key}={value}'.format(key = k, value = v))

# Combine the arguments into one string
args_string = ' '.join(formatted_args)

答案 2 :(得分:1)

试试这个

 ','.join('{}={}'.format(k, v) for d in arg_list for k, v in d.items())

答案 3 :(得分:0)

怎么样

def format_dict(d):
    key = d.keys()[0]
    return '--%s=%s' % (key, d[key])

ex = [{'a':'3'}, {'b':'4'}]
print ' '.join(map(format_dict, ex)) # --a=3 --b=4