我有以下多字典从文件输出,在我的脚本中,它作为标准输入:
{ 345 : {'name': 5, 'count': 6, 'top': 0} }
{ 233 : {'name': 6, 'count': 4, 'top': 0} }
{ 123 : {'name': 2, 'count': 9, 'top': 1} }
我想将字典中的所有键转换为这样的数字:
{ 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
我正在尝试理解字典和python的新手,所以想知道如何实现它。
这是我的代码
for line in sys.stdin:
d = ast.literal_eval(line)
for k,v in d.items():
inner_dict = dicts.setdefault(k, {})
inner_dict= dict((t,i) for (t,i) in enumerate(sorted(dicts.keys())))
for key, value in inner_dict.items():
print key, value
上面的代码给了我以下输出,但没有给我我想要的。
0 123
1 233
2 345
我哪里错了。
答案 0 :(得分:4)
# generate individual converted dictionaries
# not tested with sys.stdin
def gen_with_appropriate_name():
for n, line in enumerate(sys.stdin, 1):
d = ast.literal_eval(line)
sub_d = d.values()[0]
yield {n : {'1' : sub_d['name'],
'2' : sub_d['count'],
'3' : sub_d['top']}}
# generate individual converted dictionaries
# not tested with sys.stdin
def gen_with_appropriate_name():
for n, line in enumerate(sys.stdin, 1):
d = ast.literal_eval(line)
items = d.values()[0].items()
items.sort(key = lambda itm: itm[0])
yield {n: {i+1:item[1] for i, item in enumerate(items)}}
d = gen_with_appropriate_name()
for thing in d:
first = str(thing.keys()[0])
second = thing.values()[0]
print first + ' ' + ' '.join('{}: {}'.format(*item) for item in second.iteritems())
1 1: 5 3: 0 2: 6
2 1: 6 3: 0 2: 4
3 1: 2 3: 1 2: 9
1 1: 6 2: 5 3: 0
2 1: 4 2: 6 3: 0
3 1: 9 2: 2 3: 1
gen_with appropriate_name()
此函数一次从sys.stdin获取一个行的数据,并依次为中的每一行生成一个字典。它是可迭代的。 http://docs.python.org/2.7/glossary.html#term-iterable
yield {n: {i+1:item[1] for i, item in enumerate(items)}}
yield语句使函数成为生成器。该函数在yield语句中暂停,直到调用next(),然后执行恢复直到遇到另一个yield语句。生成器的next()方法返回yield语句的表达式列表的值。 http://docs.python.org/2.7/reference/expressions.html#yieldexpr
{n: {i+1:item[1] for i, item in enumerate(items)}}
这是yield语句的表达式列表。它创建一个以n为键的字典。该值是使用字典显示创建的字典,类似于列表推导。 http://docs.python.org/2.7/reference/expressions.html#displays-for-sets-and-dic tionaries