使用嵌套理解匹配字典

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

我正在尝试将具有预定义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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?