【问题标题】:Method of expanding list of dictionaries into list of formatted strings将字典列表扩展为格式化字符串列表的方法
【发布时间】:2016-05-09 20:55:55
【问题描述】:

我遇到了使用 subprocess 模块调用外部可执行文件的需要。一切正常,但是我想改进生成命令行参数的方式。

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

我目前有一个字典列表如下: [{arg1:value1},{arg2:value2}]

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

【问题讨论】:

  • 请包含您自己的代码,这为我们提供了更多上下文。

标签: python


【解决方案1】:

使用items(),如http://docs.quantifiedcode.com/python-code-patterns/readability/not_using_items_to_iterate_over_a_dictionary.html

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

【讨论】:

    【解决方案2】:
    ' '.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)
    

    【讨论】:

    • 感谢您的回答。另一个答案中的 map() 命令是我一直在寻找的,但是我觉得您正在确认没有灵丹妙药,并且我目前的方法本身没有任何问题。
    【解决方案3】:

    试试这个

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

    【讨论】:

      【解决方案4】:

      怎么样

      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
      

      【讨论】:

      • 我已接受您的回答,因为它似乎最符合问题的精神。 map 命令是我想到的,但想不起来了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多