python - 获取嵌套字典中的公共(public)值

标签 python dictionary

我有一个嵌套字典,如何获取具有公共(public)键值(例如 37、74 等)的值:

myDict = {0: {37.0:  {'C23H27O9': 'C22H23O10'}},
          1: {74.0:  {'C23H27O9': 'C21H19O11'}},
          2: {111.0: {'C23H27O9': 'C20H15O12'}},
          3: {148.0: {'C23H27O9': 'C19H11O13'}},
          4: {37.0:  {'C22H23O10': 'C21H19O11'}},
          5: {74.0:  {'C22H23O10': 'C20H15O12'}},
          6: {111.0: {'C22H23O10': 'C19H11O13'}},
          7: {37.0:  {'C21H19O11': 'C20H15O12'}},
          8: {74.0:  {'C21H19O11': 'C19H11O13'}},
          9: {37.0:  {'C20H15O12': 'C19H11O13'}}
         }

期望的输出:

37.0 --> C23H27O9: C22H23O10: C21H19O11 : C20H15O12 : C19H11O13
74.0 --> C23H27O9 : C21H19O11 : C19H11O13
...

最佳答案

您可以使用itertools.groupby:

from itertools import groupby as gb
myDict = {0: {37.0: {'C23H27O9': 'C22H23O10'}}, 1: {74.0: {'C23H27O9': 'C21H19O11'}}, 2: {111.0: {'C23H27O9': 'C20H15O12'}}, 3: {148.0: {'C23H27O9': 'C19H11O13'}}, 4: {37.0: {'C22H23O10': 'C21H19O11'}}, 5: {74.0: {'C22H23O10': 'C20H15O12'}}, 6: {111.0: {'C22H23O10': 'C19H11O13'}}, 7: {37.0: {'C21H19O11': 'C20H15O12'}}, 8: {74.0: {'C21H19O11': 'C19H11O13'}}, 9: {37.0: {'C20H15O12': 'C19H11O13'}}}
d = sorted([(a, [j for k in b.items() for j in k]) for i in myDict.values() for a, b in i.items()], key=lambda x:x[0])
r = [(a, [*{i for _, j in b for i in j}]) for a, b in gb(d, key=lambda x:x[0])]

输出:

[(37.0, ['C19H11O13', 'C20H15O12', 'C21H19O11', 'C22H23O10', 'C23H27O9']), (74.0, ['C19H11O13', 'C20H15O12', 'C21H19O11', 'C22H23O10', 'C23H27O9']), (111.0, ['C20H15O12', 'C19H11O13', 'C23H27O9', 'C22H23O10']), (148.0, ['C23H27O9', 'C19H11O13'])]

关于python - 获取嵌套字典中的公共(public)值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58977585/

相关文章:

Python正则表达式如果在同一正则表达式字符串中匹配多个条件

python - 如何找到 Pandas 中多列的比率?

python - 列表理解中的问题以获得计数

python - 将具有不同键的字典的值相乘

python - 使用重复条目绘制置信区间和预测区间

python - asyncio 是否支持从非主线程运行子进程?

Python - 与高斯卷积

python - 如何将变量分配给列表中的每个值

python - 如何将多个值添加到字典键?

asp.net-mvc - 如何使用 ASP.NET MVC 将字典绑定(bind)到一组复选框?