【问题标题】:convert dictionaries into string python将字典转换为字符串 python
【发布时间】:2017-03-23 13:37:20
【问题描述】:

我正在尝试将字典转换为字符串

例如:

a={3:4,5:6}
s='3 4, 5 6'

我正在尝试的方式是

s=''
i=0
for (k,v) in d.items():
    s=s+str(k)+' '+str(v)
    while i < len(s):
        if s[i]==str(v) and s[i+1]==str(k):
            s+=s+s[i]+','+s[i+1]

【问题讨论】:

  • 你真的想要那种格式吗?为什么?

标签: python string dictionary


【解决方案1】:

这是一种使用 list comprehension 的 Pythonic 方式:

s = ', '.join([str(x) + ' ' + str(a[x]) for x in a])

输出:

'3 4, 5 6'

更新:正如Julien Spronck 提到的,方括号([])不是必需的。因此,以下具有相同的效果:

s = ', '.join(str(x) + ' ' + str(a[x]) for x in a)

Working PythonFiddle

【讨论】:

  • 原来你打字更快☺
  • 你不需要方括号,它会生成一个生成器表达式
【解决方案2】:

你还可以这样拥有它

s=''
i=0
a={3:4,5:6}
for (k,v) in a.items():
    if i < len(a) and s == '':
        s = s + str(k) + ' '+ str(v)
    elif i < len(a) and s != '':
        s += ", " + str(k) + ' '+ str(v)
    i += 1
    print(s)

这应该给你

s='3 4, 5 6'

【讨论】:

    【解决方案3】:

    您可以编写 list comprehension 表达式来获取键值字符串列表,然后将它们加入 , as

    >>> d = {3:4,5:6}
    >>> ', '.join('{} {}'.format(k, v) for k, v in d.items())
    '3 4, 5 6'
    

    或者,即使使用repr()注意:这是一个 hack,我认为.join() 的方法更 Pythonic):

    >>> repr(d)[1:-1].replace(':', '')
    '3 4, 5 6'
    

    【讨论】:

      【解决方案4】:

      当然,最 Pythonic 的解决方案是使用列表推导的解决方案(请参阅 @SumnerEvans 和其他内容),但为了提供替代方案,我将在此处发布:

      a = {3: 4, 5: 6}
      
      v = str(a)
      for rep in ['{', '}', ':']:
          v = v.replace(rep, '')
      print(v)  # prints -> 3 4, 5 6
      

      一切都可以转换成一个字符串,并作为一个操作。这就是这里正在做的事情。从dictstring,然后链接replace 方法。

      【讨论】:

      • 你能谈谈这个与列表理解的效率吗?
      • 我的直觉告诉我列表理解要快得多,但我现在不能timeit,因为我在工作..尽管尝试一下。
      【解决方案5】:

      我会在列表理解中使用以下内容:

      ', '.join([str(k) + ' ' + str(v) for k, v in a.items()])
      

      举例说明:

      In [1]: a = {3:4, 5:6}
      
      In [2]: s = ', '.join([str(k) + ' ' + str(v) for k, v in a.items()])
      
      In [3]: s
      Out[3]: '3 4, 5 6'
      

      【讨论】:

      • 我实际上比我的答案更喜欢这个,因为它避免了 a[x] 的尴尬使用。
      • @SumnerEvans 我也更喜欢这种方式,但你的回答实际上比我的更简洁,而且肯定有话要说。由于没有对items() 的额外函数调用,您的性能是否也更好?
      • 嗯...我不确定字典是如何在后台存储的,我假设它们只是一组元组,因此检索它们应该相当有效,甚至可能比检索键,然后检索值。我对图书馆不够熟悉,无法确定。
      猜你喜欢
      • 2018-05-19
      • 2013-03-13
      • 1970-01-01
      • 1970-01-01
      • 2020-11-17
      • 1970-01-01
      • 2013-02-03
      • 2011-06-10
      • 2011-03-16
      相关资源
      最近更新 更多