我有这些单行词典,可从标准输入中读取。
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
答案 0 :(得分:1)
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:为什么结果没有排序? (从不订购标准的dicts。)
答案 1 :(得分:0)
>>> 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