【问题标题】:check if element in values also in key in dict检查值中的元素是否也在字典中的键中
【发布时间】:2014-08-22 09:33:11
【问题描述】:

我的输入字典为:-

classDict = {'G1': ['V1', 'G3', 'V2'], 
            'G2': ['G4', 'V3'], 
            'G3': ['V2'], 
            'G4': ['V3'], 
            'G5': ['G6'], 
            'G6': ['G2', 'G4', 'V3'], 
            'G7': ['reset']
            }

我需要转换成:-

finalStructure = {'G1': {'value':['V1','V2'],
                          'group':'G3'},         
                   'G2': {'value':'V3',
                          'group':'G4'},
                   'G3': {'value':'V2'}, 
                   'G4': {'value':'V3'},  
                   'G5': {'group':'G6'}, 
                   'G6': {'group':['G2', 'G4'],
                          'value':'V3'}, 
                   'G7': {'value':'reset'}
                   }

这里的问题是字典中的值在某些地方也是键。我需要找到它们而不是将它们作为值添加到新字典中。这个问题背后的真正目的是创建平面类结构,其中 V1、V2 等是函数,G1、G2 等是类。如果一个类 G1 在其组中有另一个类 G3,那么它应该实例化该类。 请不要使用RE来区分'G'和'V'字符,因为它们只是假名,真实姓名完全不同。

【问题讨论】:

  • 这不是代码编写服务;你尝试过什么,它到底有什么问题?
  • @jonrshape - 我试图通过多个 for 循环,在其中我将使用 for key in dict.keys() 的键与使用 for value in dict.values() 的不同值进行比较。但我被困在多个地方,无法思考。但是非常感谢您的建议。下次我也会写我的代码来解决这个问题。
  • @jonrsharpe 非常感谢这个建议。我真的应该用更好的方式来写它。

标签: python dictionary


【解决方案1】:

来了。下次也尝试自己实现一些东西。

def tofunnystructure(classDict):
    finalStructure = {}
    keys = set(classDict.keys())

    for key, vals in classDict.iteritems():
        newval = {}

        value = [val for val in vals if val not in keys]
        if value:
            newval['value'] = value[0] if len(value) == 1 else value

        groups = [val for val in vals if val in keys]
        if groups:
            newval['group'] = groups[0] if len(groups) == 1 else groups

        finalStructure[key] = newval

    return finalStructure

示例

classDict = {'G1': ['V1', 'G3', 'V2'], 
            'G2': ['G4', 'V3'], 
            'G3': ['V2'], 
            'G4': ['V3'], 
            'G5': ['G6'], 
            'G6': ['G2', 'G4', 'V3'], 
            'G7': ['reset']
            }

print tofunnystructure(classDict)

输出

{'G7': {'value': 'reset'}, 'G6': {'group': ['G2', 'G4'], 'value': 'V3'}, 'G5': {'group': 'G6'}, 'G4': {'value': 'V3'}, 'G3': {'value': 'V2'}, 'G2': {'group': 'G4' , 'value': 'V3'}, 'G1': {'group': 'G3', 'value': ['V1', 'V2']}}

【讨论】:

  • @enrico.basic 非常感谢。我尝试使用 dict.keys() 和 dict.values() 进行比较,但最终以无限循环结束......非常感谢您的回答和建议。我也应该包括我的代码。现在我可以继续我的班级结构了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多