我如何用Pythonic方式写这个: counts_to_display是一个defaultdict(dict),它包含以下数据:
defaultdict(<type 'dict'>,
{'server01': {'metric1': 9},
'server02': {'metric1': 12},
'server03': {'metric3': 8},
'server04': {'metric1': 11, 'metric2': 7}
})
headers = []
for count in counts_to_display:
for name in counts_to_display[count]:
if name not in headers:
headers.append(name)
我需要在表格中打印所有内容:
Server Metric1 Metric2 Metric3
server01 9 0 0
server02 12 0 0
server03 0 0 8
server04 11 7 0
答案 0 :(得分:0)
这是一个解决方案:
headers = {key for count in counts_to_display.values() for key in count}
我使用的是集合而不是列表,因为我们正在使用字典作为输入,无论如何都有任意排序,所以想要保持完整的排序是没有意义的,并设置自动为我们处理重复数据删除,同时也为某些操作提供更高的性能。
您也可以使用以下内容:
import itertools
headers = set(itertools.chain.from_iterable(counts_to_display.values()))
答案 1 :(得分:0)
您可以使用list comprehension
和reduce
来完成工作
headers = set(reduce(lambda x,y : x+y, [count_to_display[count].keys() for count in count_to_display]))
答案 2 :(得分:0)
reduce
怎么样?应该是最快的解决方案之一。
print sorted(reduce(lambda x, y: x.update(y) or x, servers.itervalues()).keys())
答案 3 :(得分:0)
或者像这样:
>>> d = {'server01': {'metric1': 9},
'server02': {'metric1': 12},
'server03': {'metric3': 8},
'server04': {'metric1': 11, 'metric2': 7}
}
>>> dicts = [x for x in d.values()]
>>> result = reduce(lambda d, src: d.update(src) or d, dicts, {})
>>> result
{'metric3': 8, 'metric2': 7, 'metric1': 11}
>>> res = [r for r in result.keys()]
>>> res
['metric3', 'metric2', 'metric1']