【问题标题】:Replace characters in string multi-dictionaries替换字符串多字典中的字符
【发布时间】:2013-11-18 13:28:22
【问题描述】:

我有这些从标准输入读取的单行字典。

  def gen_with appropriate_name():
     for n, line in enumerate(sys.stdin): 
     d = ast.literal_eval(line) 
     items = d.values()[0].items()
     items.sort(key = lambda itm: itm[0]) 
     yield {n+1: {i+1:item[1] for i, item in enumerate(items)}}

  d = gen_with appropriate_name() # prime the generator 

  d.next() 
  for thing in d: 
     print thing

如果您打印“d”,那么我会得到 o/p 作为字典,如下所示。

 { 1 : {'1': 5, '2': 6, '3': 0} }
 { 2 : {'1': 6, '2': 4, '3': 0} }
 { 3 : {'1': 2, '2': 9, '3': 1} }

我想把它们转换成这个:

  1 1: 5 2: 6 3: 0
  2 1: 6 2: 4 3: 0
  3 1: 2 2: 9 3: 1

因为字典没有 replace 或 re.sub 方法。格式化它们变得复杂。另外,我无法将 dict 转换为字符串然后进行格式化。

  for item in [str(k) + " " + "".join(str(k1) + ": " + str(v1) + " " for k1, v1 in       v.items()) for k, v in d.items()]:
      print item

【问题讨论】:

  • 我没有看到多行字典,我看到三个单独的单行字典。您如何存储这些字典?
  • 您是如何从标准输入中读取字典的?你在 Python 2 中做 input 吗?如果是这样,请尝试raw_input,无论输入是否像 Python 文字,它都会返回一个字符串。
  • @Blckknght 检查我上面的代码。就这样完成了
  • @Marius 不想存储它们

标签: python regex string dictionary


【解决方案1】:
>>> data = { 1 : {'1': 5, '2': 6, '3': 0},
...  2 : {'1': 6, '2': 4, '3': 0},
...  3 : {'1': 2, '2': 9, '3': 1} }
>>> for k,v in data.items():
...     print k, " ".join("{}: {}".format(*i) for i in v.items())
... 
1 1: 5 3: 0 2: 6
2 1: 6 3: 0 2: 4
3 1: 2 3: 1 2: 9

请注意,由于dict 是无序的,因此不会保留行的顺序或其中项目的顺序

您可以像这样轻松地对它们进行排序

>>> for k,v in sorted(data.items()):
...     print k, " ".join("{}: {}".format(*i) for i in sorted(v.items()))
... 
1 1: 5 2: 6 3: 0
2 1: 6 2: 4 3: 0
3 1: 2 2: 9 3: 1

【讨论】:

  • 你能看到上面的代码并告诉我,因为你的解决方案在我的情况下不起作用
【解决方案2】:

Thefourtheye 更快,但这里是我的版本:

d = { 1 : {'1': 5, '2': 6, '3': 0},
      2 : {'1': 6, '2': 4, '3': 0},
      3 : {'1': 2, '2': 9, '3': 1} }

print('\n'.join('{} {}'.format(k, ' '.join('{}: {}'.format(k, v) for k, v in v.items())) for k, v in d.items()))

inb4:为什么结果没有排序? (标准字典从不排序。)

【讨论】:

  • 你能看到上面的代码并告诉我,因为你的解决方案在我的情况下不起作用。
  • 你有各种各样的字典,我把它们合二为一。
  • 什么是d?它从何而来?它的类型和内容是什么?
猜你喜欢
  • 2021-11-16
  • 2022-11-10
  • 2018-09-11
  • 2012-04-26
  • 2010-11-16
  • 1970-01-01
  • 2018-03-02
  • 2017-07-15
  • 2016-10-23
相关资源
最近更新 更多