在python上使用join函数格式化词典

在python上使用join函数格式化词典,python,Python,我正试图建立一个字典,其中的关键是食物网中捕食者的名字,其值是捕食者所吃猎物的列表。我可以把全部打印出来,但是打印出来的猎物列表都用逗号隔开。我想格式化它,使最后一个逗号不是逗号,而是说“和” 这是我的,d是我的字典: for key in d: print(key, "eats", ', '.join(map(str,d[key]))) 这将打印出,例如: Lobster eats mussels, limpets, whelk 我想把最后一个逗号改为“and”。我知道我必

我正试图建立一个字典,其中的关键是食物网中捕食者的名字,其值是捕食者所吃猎物的列表。我可以把全部打印出来,但是打印出来的猎物列表都用逗号隔开。我想格式化它,使最后一个逗号不是逗号,而是说“和”

这是我的,d是我的字典:

for key in d:
        print(key, "eats", ', '.join(map(str,d[key])))
这将打印出,例如:

Lobster eats mussels, limpets, whelk
我想把最后一个逗号改为“and”。我知道我必须找到逗号的索引,这是通过以下方式完成的:

pos=str(d[key]).rfind(",")
我只是不知道如何从这里完成它

有什么建议吗


谢谢你

像这样的东西可能吧

def add_and(s):                                
   before, after = s.rsplit(', ', 1)
   return before + ', and ' + after

>>> add_and('Lobster eats mussels, limpets, whelk')
'Lobster eats mussels, limpets, and whelk'

在您的示例中,如果
prey
包含逗号,您可能会遇到问题,这可能吗

我建议:

for predator, prey in d.items():
    print '%s eats %s and %s' % (predator, ', '.join(prey[:-1]), prey[-1])
对于捕食者,d.items()中的猎物在所有键和值对上循环

join(猎物[:-1])
获取除最后一个猎物外的所有猎物,并用逗号连接它们

猎物[-1]
然后添加最后一个猎物

每一个
%s
都会被行末尾元组中的值替换

尝试以下操作:

for key in d:
  l = d[key]
  print ', '.join(l[:-1]) + ' and ' + str(l[-1])

如果
len(preys)这是最好的解决方案,但你在
prey[:-1]
@user1883020 nice:)之后缺少了一个结束括号。请通过向上投票和/或选择我的答案来支持我的理由
for predator, preys in d.items():
    print '{0} eats {1}'.format(  predator,
                                  ', '.join(preys[:-1]) + \
                                  " and " + preys[-1] if len(preys) > 1 else preys[-1],
                                  )