微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用嵌套理解匹配字典

如何解决使用嵌套理解匹配字典

我正在尝试将具有预定义RAID配置的字典与包含物理磁盘布局的字典进行匹配。

raid_config = 
{ 'server1': [{'name' : 'data','disks' : 3,'block' : 300}],'server2': [{'name' : 'data','disks' : 8,'block' : 2200}],'server3': [{'name' : 'data','disks' : 2,'block' : 300},{'name' : 'data2',{'name' : 'data3','block' : 1800},{'name' : 'data','server4': [{'name' : 'data',{{'name' : 'data2','block' : 880}]
}
disks =
{300: ['bay0','bay1',bay10'],880: ['bay2','bay3','bay4','bay5','bay6','bay7','bay8','bay9']}

以前,我写了一篇理解文章,总结了RAID配置和物理磁盘的磁盘大小并进行了匹配。这将不再起作用,因为这将导致针对不同布局的多次匹配。

print({sum(v['disks']*v['size'] for v in vs) : k for k,vs in raid_config.items()}.get(sum(k*v for k,v in {k : len(v) for k,v in disks.items()}.items())))
-->
server4

我正在努力提出一种简约的方法来获得精确匹配。最好的方法是什么?

解决方法

我自己弄清楚了,但是我敢肯定它可以做得更整洁一些,因此仍然欢迎大家输入。

configs = {}

for k,v in raid_config.items():
  configs[k] = {}
  for d in v:
    if d.get('size') in configs[k]:
      configs[k][d.get('size')] += d.get('disks') 
    else:
      configs[k][d.get('size')] = d.get('disks') 

^-非常确定可以在一行中完成

这将导致:

{'server1': {300: 3},'server2': {2200: 8},'server3': {300: 12,1800: 2},'server4': {300: 3,880: 8}}

找到匹配的配置:

for k,v in configs.items():
  if disks == v:
    print(k)

结果: server4

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。