Python 嵌套字典中键的和值
我试图计算每台服务器的磁盘总数,数据存储如下:Python 嵌套字典中键的和值,python,list,dictionary,Python,List,Dictionary,我试图计算每台服务器的磁盘总数,数据存储如下: config = { 'server1': [{'name' : 'data', 'disks' : 3, 'block' : 300}], 'server2': [{'name' : 'data', 'disks' : 8, 'block' : 2200}], 'server3': [{'name' : 'data', 'disks' : 2, 'block' : 300}, {'name' : 'data2', 'disks' : 2
config =
{ 'server1': [{'name' : 'data', 'disks' : 3, 'block' : 300}],
'server2': [{'name' : 'data', 'disks' : 8, 'block' : 2200}],
'server3': [{'name' : 'data', 'disks' : 2, 'block' : 300}, {'name' : 'data2', 'disks' : 2, 'block' : 300}, {'name' : 'data3', 'disks' : 2, 'block' : 1800}, {'name' : 'data', 'disks' : 8, 'block' : 300}],
'server4': [{'name' : 'data', 'disks' : 3, 'block' : 300}, {{'name' : 'data2', 'disks' : 8, 'block' : 880}]
}
我想到了:
for k,v in config.items():
no_disks = 0
for l in v:
no_disks+= l.get('disks')
print({k:no_disks})
其结果是:
{'server1': 3}
{'server2': 8}
{'server3': 14}
{'server4': 11}
我试图用dict comprehension一行一行地完成这项工作,但想不出来,有什么更优雅的解决方案的建议吗?您可以:
from operator import itemgetter
config = {'server1': [{'name': 'data', 'disks': 3, 'block': 300}],
'server2': [{'name': 'data', 'disks': 8, 'block': 2200}],
'server3': [{'name': 'data', 'disks': 2, 'block': 300}, {'name': 'data2', 'disks': 2, 'block': 300},
{'name': 'data3', 'disks': 2, 'block': 1800}, {'name': 'data', 'disks': 8, 'block': 300}],
'server4': [{'name': 'data', 'disks': 3, 'block': 300}, {'name': 'data2', 'disks': 8, 'block': 880}]
}
disks = itemgetter('disks')
result = { k : sum(disks(v) for v in vs) for k, vs in config.items()}
print(result)
输出
{'server1': 3, 'server2': 8, 'server3': 14, 'server4': 11}
或者直接访问元素:
result = { k : sum(v['disks'] for v in vs) for k, vs in config.items()}
上述词典理解等同于此for循环:
result = {}
for k, vs in config.items():
result[k] = sum(v['disks'] for v in vs)
你可以做:
from operator import itemgetter
config = {'server1': [{'name': 'data', 'disks': 3, 'block': 300}],
'server2': [{'name': 'data', 'disks': 8, 'block': 2200}],
'server3': [{'name': 'data', 'disks': 2, 'block': 300}, {'name': 'data2', 'disks': 2, 'block': 300},
{'name': 'data3', 'disks': 2, 'block': 1800}, {'name': 'data', 'disks': 8, 'block': 300}],
'server4': [{'name': 'data', 'disks': 3, 'block': 300}, {'name': 'data2', 'disks': 8, 'block': 880}]
}
disks = itemgetter('disks')
result = { k : sum(disks(v) for v in vs) for k, vs in config.items()}
print(result)
输出
{'server1': 3, 'server2': 8, 'server3': 14, 'server4': 11}
或者直接访问元素:
result = { k : sum(v['disks'] for v in vs) for k, vs in config.items()}
上述词典理解等同于此for循环:
result = {}
for k, vs in config.items():
result[k] = sum(v['disks'] for v in vs)
熊猫是一种选择,还是你需要它成为一种听写理解?一本字典理解会产生一本字典。显然你需要多个字典。@BjörnB不,这不是要求,只是要求thought@Lunacy我认为Dani Mesejo提供了完美的一行程序,其中
result={k:sum(磁盘(v)代表vs中的v)代表k,vs代表config.items()
pandas是一个选项,还是您需要它作为一个dict理解?一个字典理解会产生一个字典。显然你需要多个字典。@BjörnB不,这不是要求,只是要求thought@Lunacy我认为Dani Mesejo提供了一个完美的一行程序,其中result={k:sum(磁盘(v)代表vs中的v)代表k,vs代表config.items()}