如何通过使用Python标识最后一项来连接字典中的字符串?

如何通过使用Python标识最后一项来连接字典中的字符串?,python,dictionary,Python,Dictionary,我需要将字符串连接到现有字符串,如下所示 for k,v in r.iteritems(): tableGenString += "%s %s, " % (k, what_type(v)) for k,v in r.iteritems(): filteredKey = m.mapper(k) (typestring, valuestring) = what_type(v) tableGenString += "%s %s, " % (k, typestring)

我需要将字符串连接到现有字符串,如下所示

for k,v in r.iteritems():
    tableGenString += "%s %s, " % (k, what_type(v))
for k,v in r.iteritems():
    filteredKey = m.mapper(k)
    (typestring, valuestring) = what_type(v)
    tableGenString += "%s %s, " % (k, typestring)
    string1 += "%s, " % k
    string2 += "%s, " % valuestring
问题是,对于最后一项,不应添加逗号(',')

如何检查k,v是否为最后一项

补充 该示例是真实代码的简化版本,如下所示

for k,v in r.iteritems():
    tableGenString += "%s %s, " % (k, what_type(v))
for k,v in r.iteritems():
    filteredKey = m.mapper(k)
    (typestring, valuestring) = what_type(v)
    tableGenString += "%s %s, " % (k, typestring)
    string1 += "%s, " % k
    string2 += "%s, " % valuestring

我需要检查这个箱子的最后一项

不要用那样的连接来构建大字符串。改为这样做:

tableGenString = ', '.join('%s %s' % (k, what_type(v)) for k, v in r.iteritems())
对于以下情况,请使用“join”字符串方法而不是outter:

tableGenString = ", ".join ("%s %s" %(k, what_type(v) for k, v in r.iteritems())

OP在评论中强调:

我要想办法找到最后一个 当我添加到我的原始 问题:

显然是出于其他目的,而不是笨拙地复制
,”。正确地加入其他答案中建议的

当然,
iteritems
表示键和值的顺序(或者在dict上迭代的任何其他方式,dict是一个哈希表,没有“顺序”的概念,因此也没有“第一个”或“最后一个”的概念!)是完全任意的。然而,可以确定最后一个(以任意顺序呈现):

for i, (k,v) in enumerate(r.iteritems()):
    if i == len(r) - 1:
        print "last item: key=%r, value=%r" % (k, v)

类似地,一旦从这种
枚举
调用中获得
i
如果i==0:
将标识第一项,
如果i==len(r)//2:
将标识中间项,依此类推。

。如果您想要可读的内容,而不是过于密集的连接,请参见:

def build_str(r):
    tableGenString = ""
    for k,v in r.iteritems():
        if tableGenString != "":
            tableGenString += ", "
        tableGenString += "%s %s" % (k, type(v))

    return tableGenString
样本返回值:

baz <type 'str'>, have a list <type 'list'>, foo <type 'int'>, bar <type 'str'>, or a tuple <type 'tuple'>


呵呵……没有什么比拥有“一个显而易见的方法”更合适的了:-)你的答案应该有用,但我需要找到一种方法来找到我在原始问题中添加的最后一项。@prosseek:不,你没有。“join”命令正是针对您要执行的操作的。它将使用一个iterable并用分隔符(字符串)将元素连接在一起。因此,“,”.join(范围(3))将给出“0,1,2”。@proseek:即使您真的必须删除最后一个逗号(您不需要,因为Python是智能设计的),您仍然不必找到最后一个元素,但可以通过切片或.strip()将其从连接的字符串中删除。对不起。,,5行额外代码,其中一个超级文档化的字符串方法在一行中解析,这不是Python的用途。连接看起来很难读取,但这更多地是由于OP变量名(k、v和r)而不是其他原因。@jsbueno:上次我检查时,Python用于创建高效、可维护的代码。试图让它看起来像Perl,并且需要一半的开发人员去查找一些东西来试图理解一个简单的连接操作是没有效率的,也不利于可维护的代码。@jsbueno:另外,它实际上与.join()本身无关。一个普通的.join()调用一点也不困扰我,它在其中嵌入了一个丑陋的循环变种形式。我认为一个更好的答案会鼓励询问者不要使用这个愚蠢的方案。如果你在enumerate(r.iteritems(),1-len(r))中对I,(k,v)使用这个
,那么你可以只检查
I==0
来检测最后一项