打印特定格式的字典

时间:2015-06-01 08:20:37

标签: python dictionary printing

我已经完成了我的项目,我想打印我的结果。 我有这样的字典: {('a',): 4, ('b',): 5, ('c', 'd'): 3, ('e', 'f'): 4, ('g', 'h'): 3, ('i',): 3}

某些对键值中的键是一个元素,而在其他键值中则是两个或三个。 我想用这种格式打印它,一行中有一个键的元素,新行中有两个键的元素等等......

(elem,)
(elem1, elem2, ..., elem_n)

我试过这个:

itemdct //my dict
result = [itemdct]
csv_writer = csv.writer(sys.stdout, delimiter=';')
row = []
for itemdct in result:
    for key in sorted(itemdct.keys()):
        row.append("{0}:{1}".format(key, itemdct[key]))
csv_writer.writerow(row)

但我的输出就像这一行。

('a',):3;('b',):4;('c', 'd'):3;('e', 'f'):3;......

mydict就像这样

{('a',): 3, ('b', 'c'): 3, ....}

,结果就像这样

[{('a',): 3, ('b', 'c'): 3,.....}]

提前谢谢你..

编辑:我希望我的输出是这样的:

('a',):3;('c',):4;('c',):5;('d',):6;('e',):3
('a', 'c'):3;('b', 'd'):3;('c', 'd'):4

3 个答案:

答案 0 :(得分:0)

使用itertools.groupby(需要注意的一点是,您必须先排序,因为groupby会在键值更改时创建新组):

from itertools import groupby
d = {('a',): 4, ('b',): 5, ('c', 'd'): 3, ('e', 'f'): 4, ('g', 'h'): 3, ('i',): 3}
for i, g in groupby(sorted(d.items(), key = lambda k: len(k[0])), lambda k: len(k[0])):
  print(';'.join('%s:%s' %(k,v) for k,v in g))

## -- End pasted text --
('a',):4;('i',):3;('b',):5
('e', 'f'):4;('g', 'h'):3;('c', 'd'):3

P.S。我不确定你的任务是什么,但你可能不应该使用元组作为字典中的键。

答案 1 :(得分:0)

这有两个步骤。第一个是整理哪个条目进入哪一行,另一个是打印这些行。

from collections import defaultdict

d = {('a',): 4, ('b',): 5, ('c', 'd'): 3, ('e', 'f'): 4, ('g', 'h'): 3, ('i',): 3}

keysize = defaultdict(list)
for key in d:
    keysize[len(key)].append("{}:{}".format(key, h[key]))

for size, line in keysize.iteritems():
    print ", ".join(line)

答案 2 :(得分:0)

您可以根据密钥长度对字典中的项目进行排序。您可以使用groupby按密钥长度分组并打印每个组。

def printDict(myDict):
    from itertools import groupby
    def sortFunc(item):
        return len(item[0])

    sortedItems = sorted(myDict.items(), key=sortFunc)
    groups = groupby(sortedItems, sortFunc)
    for _, group in groups:         
        print( ';'.join('%s:%s' % entry for entry in group))

输出:

>>> printDict({('a',): 4, ('b',): 5, ('c', 'd'): 3, ('e', 'f'): 4, ('g', 'h'): 3, ('i',): 3})
('a',):4;('i',):3;('b',):5
('e', 'f'):4;('g', 'h'):3;('c', 'd'):3