【问题标题】:python: dictionary to string, custom format?python:字典到字符串,自定义格式?
【发布时间】:2012-01-21 02:52:43
【问题描述】:

目前我只显示键,每个都换行:

'<br/>'.join(mydict)

如何像 key:: value 一样显示它们,每个都在新行中?

【问题讨论】:

    标签: python string dictionary


    【解决方案1】:

    如果您想成为更多 pythonic,我们可以完全删除for-comprehension。

    '<br/>'.join(map(':: '.join, mydict.items()))
    

    【讨论】:

    • 最后只缺少 1 个)'&lt;br/&gt;'.join(map(':: '.join, mydict.items()))
    【解决方案2】:

    遍历dict.items() 迭代器,它将产生一个键值元组:

    '<br/>'.join(['%s:: %s' % (key, value) for (key, value) in d.items()])
    

    更新为现代f-string 符号:

    '<br/>'.join([f'{key}:: {value}' for key, value in d.items()])
    

    【讨论】:

    • 这是我见过的最 Pythonic 的解决方案。太棒了。
    • 如果你不解包元组,那么冗长:'&lt;br/&gt;'.join(['%s:: %s' % kv for kv in d.items()])
    【解决方案3】:

    在 python 3.6 中我更喜欢这种语法,这使得代码更具可读性:

    '<br/>'.join([f'{key}: {value}' for key, value in d.items()])
    

    PEP 498 -- Literal String Interpolation

    【讨论】:

      【解决方案4】:

      我喜欢 Filip Dupanović 上面所做的。我使用str.format 方法将其修改为python3-ish。

      '<br/>'.join(['{0}:: {1}'.format(key, value) for (key, value) in d.items()])
      

      我修改了上面的内容以生成一个字符串,我可以将其提供给 SQL 表创建语句。

      fieldpairs = ','.join(['{0} {1}'.format(key, value) for (key, value) in HiveTypes.items()])
      

      【讨论】:

        【解决方案5】:

        那个,或者一个更酷的解决方案,使用join 加入两个项目 (key,value) 对,避免现在过时的% 插值,只使用一个虚拟变量_,并删除冗余列表理解:

        "<br/>".join(":: ".join(_) for _ in mydict.items())
        

        请注意,dicts 没有排序,因此如果没有 sorted(),您可能无法得到您想要的:

        >>> mydict = dict(a="A", b="B", c="C")
        >>> ", ".join("=".join(_) for _ in mydict.items())
        'a=A, c=C, b=B'
        

        这也仅在所有键和值都是字符串时才有效,否则join 会抱怨。更强大的解决方案是:

        ", ".join("=".join((str(k),str(v))) for k,v in mydict.items())
        

        现在它工作得很好,即使是混合类型的键和值:

        >>> mydict = {'1':1, 2:'2', 3:3}
        >>> ", ".join("=".join((str(k),str(v))) for k,v in mydict.items())
        '2=2, 3=3, 1=1'
        

        当然,对于混合类型,普通的sorted() 不会按预期工作。仅当您知道所有键都是字符串(或所有数字等)时才使用它。在前一种情况下,您也可以删除第一个 str()

        >>> mydict = dict(a=1, b=2, c=2)
        >>> ", ".join("=".join((k,str(v))) for k,v in sorted(mydict.items()))
        'a=1, b=2, c=3'
        

        【讨论】:

        • 最后一个是和我的字典一样的数据格式。但是当我尝试你的解决方案时它返回此消息:TypeError: 'str' object is not callable
        • @JihyeSeo:您正在尝试我的哪一种解决方案,您的 dict 布局是什么?我给出了 3 种选择:最简单的一种要求键和值都是字符串;更健壮的一个适用于混合数据,但不能是sorted(),最后一个需要统一数据(和字符串键)。这完全取决于您的数据格式。
        • @JihyeSeo:鉴于你的错误,很可能你命名了一个变量str,隐藏了内置的str 类。不要使用内置名称来命名您的对象!
        • 我使用的最后一个。我没有使用内置的 str 类。无论如何,我使用不同的解决方案解决了它。非常感谢!
        猜你喜欢
        • 1970-01-01
        • 2023-03-08
        • 2012-08-28
        • 1970-01-01
        • 2016-11-30
        • 2014-04-10
        • 2013-08-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多