【转帖】argument after ** must be a mapping, not list

转自:https://teamtreehouse.com/community/format-argument-after-must-be-a-mapping-not-list

问题:

Create a function named string_factory that accepts a list of dictionaries and a string. Return a new list build by using .format() on the string, filled in by each of the dictionaries in the list.

Here's my code: Please help!

dicts = [
    {'name': 'Michelangelo',
     'food': 'PIZZA'},
    {'name': 'Garfield',
     'food': 'lasanga'},
    {'name': 'Walter',
     'food': 'pancakes'},
    {'name': 'Galactus',
     'food': 'worlds'}
]

string = "Hi, I'm {name} and I love to eat {food}!"

def string_factory(dicts, string):
  strings = []
  for items in dicts:
   string.format(**dicts) 
  return strings

print(string_factory(dicts, string))

方案:

Here you can see 2 possible ways of doing it:

First:

def string_factory(dictionary, strings):
  string_list = []
  for i in range(len(dictionary)):
    string_list.append(strings.format(**dictionary[i]))

  return string_list

Second:

def string_factory(dictionary, strings):
  string_list = []
  for element in dictionary:
    string_list.append(strings.format(**element))

  return string_list

采纳:

def string_factory(dicts, string):

  formatted = []
  for data in dicts:
    new_dict = data
    formatted.append(string.format(**new_dict))
  return formatted


print(string_factory(dicts, string))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值