【问题标题】:Type Error: Format Requires Mapping类型错误:格式需要映射
【发布时间】:2012-04-16 22:11:51
【问题描述】:

我有一个字符串和一个对象列表:

gpl = "%(id)s : %(atr)s"

objects = [{'id':1, 'content':[{'atr':'big', 'no':2}]},  {'id':2, 'content': [{'atr':'small', 'no':3}]}]

for obj in objects:
   for con in obj['content']:
       print gpl %(obj,con)

我明白了:

TypeError: format requires a mapping

我将如何打印这个?我正在尝试打印:

1 : big
2 : small

谢谢

【问题讨论】:

    标签: python string list object dictionary


    【解决方案1】:

    您需要将 objcon 转换为一个字典 - 您当前的代码传入 tuple

    如果您不关心之后objects 会发生什么,请使用dict.update

    for obj in objects:
        for con in obj["content"]:
            con.update(obj)
            print gpl % con
    
    1 : big
    2 : small
    

    如果您不想修改objects,则需要构建一个中间字典:

    for obj in objects:
        for con in obj["content"]:
            print gpl % {'id': obj["id"], 'atr': con["atr"]}
    
    1 : big
    2 : small
    

    【讨论】:

      【解决方案2】:

      由于您的格式化字符串使用命名参数:

      gpl = "%(id)s : %(atr)s"
      

      您需要提供字典中的键(名称)作为参数,以引用回格式化字符串中命名的格式化键:

      print gpl % {'id': obj['id'], 'atr': con['atr']}
      

      所以你的代码是:

      for obj in objects:
          for con in obj['content']:
              print gpl% {'id': obj['id'], 'atr': con['atr']}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-18
        相关资源
        最近更新 更多