【问题标题】:Pythonic way to iterate a dictionary to convert its items to string迭代字典以将其项目转换为字符串的 Pythonic 方法
【发布时间】:2017-01-10 15:58:19
【问题描述】:

我有一本字典,例如:

a = { "Linux": "Linus Torvalds", 
      "Microsoft": "Bill Gates", 
      "Apple": "Steve Jobs"}

我想把这本字典字符串化成这样的:

Linux    : Linus Torvalds
Microsoft: Bill Gates
Apple    : Steve Jobs

为了做这个操作,我有以下代码:

data = ""
for product, lead in a.items():
    data += product + ": " + lead + "\n"

此代码产生以下结果:

print(data)
Linux: Linus Torvalds
Microsoft: Bill Gates
Apple: Steve Jobs

我想要一种更 Pythonic 的方式来执行此操作,因为我认为我的代码更像是解决此问题(初始化和操作)的程序方法。此外,任何有关正确格式化data 的提示都不会出错。

【问题讨论】:

  • 为什么要在这里制作字符串,以进行可视化?我无法想象这是一个好主意的情况
  • @Chris_Rands 是的。我想打印数据。
  • 那么就迭代,for k,v in a.items(): print(k,v) 或者你可以使用pprint,但这可能有点矫枉过正

标签: python string python-3.x dictionary printing


【解决方案1】:

如果你想让它们像你一样格式化

print('\n'.join(['{:<9}: {}'.format(k, v) for k, v in a.items()]))

打印

Apple    : Steve Jobs
Linux    : Linus Torvalds
Microsoft: Bill Gates

【讨论】:

  • 您也可以使用星号格式,例如:.format(*pair) for pair in a.items()。我喜欢这种方法更好地控制它允许的行格式。
  • 感谢您的解决方案和@Kounis 的建议。
  • @Ev.Kounis 显式优于隐式。它有助于记录在这种情况下哪个是哪个。
  • @MarkRansom 那么OP的原始解决方案也很好。
【解决方案2】:

您可以使用嵌套的str.join 操作。

print('\n'.join(': '.join(item) for item in a.items()))
#  Linux: Linus Torvalds
#  Microsoft: Bill Gates
#  Apple: Steve Jobs

这将创建一个包含由': ' 分隔的键和值的生成器,然后将它们与“\n”连接在一起。

【讨论】:

  • 感谢您的解决方案
【解决方案3】:

首先使用mapdict 转换为可迭代对象,然后使用join 连接元素:

work_person = map(lambda x: x[0]+': '+x[1], a.items())    
res = '\n'.join(work_person)

【讨论】:

    【解决方案4】:

    我会在 Patrick 的回答中添加检查最长密钥长度以填充密钥:

    max_length = max(len(k) for k in a)
    print('\n'.join(['{:<{}}: {}'.format(k, max_length, v) for k, v in a.items()]))
    

    【讨论】:

      猜你喜欢
      • 2017-10-10
      • 2014-07-03
      • 2010-12-21
      • 2016-05-29
      • 2014-12-16
      • 1970-01-01
      • 2013-09-19
      • 2012-04-16
      • 1970-01-01
      相关资源
      最近更新 更多