2

我正在尝试格式化字典,其中键是食物网中捕食者的名称,值是捕食者吃的猎物列表。我可以将整个打印出来,但打印出来的猎物列表都用逗号分隔。我想格式化它,所以最后一个逗号不是逗号,而是说“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(",")

我只是不知道如何从这里完成它。

有什么建议么?

谢谢你

4

4 回答 4

4

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

我会建议:

for predator, prey in d.items():
    print '%s eats %s and %s' % (predator, ', '.join(prey[:-1]), prey[-1])

for predator, prey in d.items()循环遍历所有键值对。

', '.join(prey[:-1])带走除最后一个猎物以外的所有猎物,并用逗号加入它们

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

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

于 2012-12-06T16:52:49.443 回答
1

可能是这样的?

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'
于 2012-12-06T16:52:45.837 回答
1

尝试这个:

for key in d:
  l = d[key]
  print ', '.join(l[:-1]) + ' and ' + str(l[-1])
于 2012-12-06T16:52:52.487 回答
0

我会用这个以防万一len(preys) <= 1

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],
                                  )
于 2012-12-06T17:52:29.823 回答