dict values pass into a function

生来就可爱ヽ(ⅴ<●) 提交于 2020-12-27 07:15:29

问题


I have below dictionary

a={
'set1': {'fileName': 'filename1', 
'moduleName': 'modulename1',  
'connection1.name': 'connection1', 
'connection.test':'connectiontest1',
'connection2.name': 'connection2', 
'connection.test':'connectiontest2',
'queue1.name': 'queue1',
'queue1.test':'queuetest1',
'topic1.name':'topic1',
'topic1.test':'topic1test',
'topic2.name':'topic2',
'topic2.test':'topic2test',
'ServerName': 'serverone', 
'DeploymentName': 'deployment1'
},

'set2':{'fileName': 'filename2', 
'moduleName': 'modulename2',  
'connection1.name': 'connection1', 
'connection.test':'connectiontest1',
'queue1.name': 'queue1',
'queue1.test':'queuetest1',
'topic1.name':'topic1',
'topic1.test':'topic1test',
'topic2.name':'topic2',
'topic2.test':'topic2test',
'ServerName': 'servertwo', 
'DeploymentName': 'deployment2'
}}

in each set, I need to pass it to a function to create a server from the above dictionary.

def create_server_config(fileName,moduleName,connection,connectiontest,topic,topictest,queue,queuetest,servername,deploymentname):

    create_queue(queue,queuetest)

    create_topic(topic,topictest)

    create_connection(connection,connectiontest)

In this I want to pass each set into a function as an argument So that it will create a server for each set, the problem here is queue,topic,connection has multiple increment values in each set. so anyone helps me with how to pass it to a function. for example, if I want to create a queue then under create_server_config function , need to pass all the queue and queuetest related to set1 dict.


回答1:


I have a few questions for you. Based on that, the answer might change.

Below code assumes the following:

  1. In Set1 & Set2, there are two connection.test keys. This may be a typo. I am assuming the first one is connection1.test and second one is connection2.test

  2. connection1.name, queue1.name, and topic1.name will ALWAYS be present in each set

  3. If topic2.name exists but connection2.name and queue2.name does not exist, then it is OK to pass connection1.name and queue1.name values to create server config.

  4. Similarly, if any combination of connection2.name, connection2.test, queue2.name, queue2.test, topic2.name, topic2.test exists but the others do not exist, then the value from xxx1.name or xxx1.test will be used in its place where xxx is connection or queue or topic.

This code will call the create server config function for each value of the dict:

a={
    'set1':{'fileName': 'filename1', 
            'moduleName': 'modulename1',  
            'connection1.name': 'connection1', 
            'connection1.test':'connectiontest1',
            'connection2.name': 'connection2', 
            'connection2.test':'connectiontest2',
            'queue1.name': 'queue1',
            'queue1.test':'queuetest1',
            'topic1.name':'topic1',
            'topic1.test':'topic1test',
            'topic2.name':'topic2',
            'topic2.test':'topic2test',
            'ServerName': 'serverone', 
            'DeploymentName': 'deployment1'
           },

    'set2':{'fileName': 'filename2', 
            'moduleName': 'modulename2',  
            'connection1.name': 'connection1', 
            'connection1.test':'connectiontest1',
            'queue1.name': 'queue1',
            'queue1.test':'queuetest1',
            'topic1.name':'topic1',
            'topic1.test':'topic1test',
            'topic2.name':'topic2',
            'topic2.test':'topic2test',
            'ServerName': 'servertwo', 
            'DeploymentName': 'deployment2'
           }
  }
for s,setkey in a.items():
    fileName       = setkey['fileName']
    moduleName     = setkey['moduleName']
    connection     = setkey['connection1.name']
    connectiontest = setkey['connection1.test']
    topic          = setkey['topic1.name']
    topictest      = setkey['topic1.test']
    queue          = setkey['queue1.name']
    queuetest      = setkey['queue1.test']
    servername     = setkey['ServerName']
    deploymentname = setkey['DeploymentName']

    print (fileName,moduleName,                     \
                         connection,connectiontest, \
                         topic,topictest,queue,     \
                         queuetest,servername,deploymentname)

    create_server_config(fileName,moduleName,       \
                         connection,connectiontest, \
                         topic,topictest,queue,     \
                         queuetest,servername,deploymentname)

    flag = False

    if 'connection2.name' in setkey:
        flag = True
        connection     = setkey['connection2.name']
        
    if 'connection2.test' in setkey:
        flag = True
        connectiontest = setkey['connection2.test']

    if 'queue2.name'      in setkey:
        flag = True
        queue          = setkey['queue2.name']
        
    if 'queue2.test'      in setkey:
        flag = True
        queuetest      = setkey['queue2.test']

    if 'topic2.name'      in setkey:
        flag = True
        topic          = setkey['topic2.name']
        
    if 'topic2.test'      in setkey:
        flag = True
        topictest      = setkey['topic2.test']

    if flag:
        print (fileName,moduleName,                 \
                         connection,connectiontest, \
                         topic,topictest,queue,     \
                         queuetest,servername,deploymentname)

        create_server_config(fileName,moduleName,   \
                         connection,connectiontest, \
                         topic,topictest,queue,     \
                         queuetest,servername,deploymentname)


来源:https://stackoverflow.com/questions/65229569/dict-values-pass-into-a-function

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!