python: dictionary to string, custom format?

后端 未结 5 1379
野性不改
野性不改 2020-12-23 12:48

currently I\'m displaying keys only, each in new line:

\'
\'.join(mydict)

how do I display them like key:: value

相关标签:
5条回答
  • 2020-12-23 13:27

    That, or an even cooler solution using join to join both items and the (key,value) pairs, avoiding the now-obsolete % interpolation, using only a single dummy variable _, and dropping the redundant list comprehension:

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

    Be aware that dicts have no ordering, so without sorted() you might not get what you want:

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

    This also only work when all keys and values are strings, otherwise join will complain. A more robust solution would be:

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

    Now it works great, even for keys and values of mixed types:

    >>> 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'
    

    Of course, for mixed types a plain sorted() will not work as expected. Use it only if you know all keys are strings (or all numeric, etc). In the former case, you can drop the first str() too:

    >>> 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'
    
    0 讨论(0)
  • 2020-12-23 13:45

    If you wanted to be more pythonic, we can remove the for-comprehension altogether.

    '<br/>'.join(map(':: '.join, mydict.items())
    
    0 讨论(0)
  • 2020-12-23 13:51

    Go through the dict.items() iterator that will yield a key, value tuple:

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

    Updated with modern f-string notation:

    '<br/>'.join([f'{key}:: {value}' for key, value in d.items()])
    
    0 讨论(0)
  • 2020-12-23 13:53

    I liked what Filip Dupanović did above. I modified this to be python3-ish using str.format method.

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

    I modified the above to generate a string I could feed to a SQL table create statement.

    fieldpairs = ','.join(['{0} {1}'.format(key, value) for (key, value) in HiveTypes.items()])
    
    0 讨论(0)
  • 2020-12-23 13:54

    In python 3.6 I prefer this syntax, which makes the code even more readable:

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

    See PEP 498 -- Literal String Interpolation

    0 讨论(0)
提交回复
热议问题