Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 嵌套字典中键的和值_Python_List_Dictionary - Fatal编程技术网

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()}