2015-02-09 58 views
-1

在下面的代码块中,我想传输字典的名称(result_dict),但不传输内容。如何传递字典的名称

def define_var(dictionary, entry, counter): 
    for i in range(counter): 
    print "reason%d = %s['%s_%d']" % (i + 1, dictionary, entry, counter) 

当我调用函数等:

define_var(result_dict, 'start', 3) 

它打印:

reason1 = { 'START_2': 'TEST2', 'start_3': 'TEST3',' START_1 ': 'TEST1'}' START_1' ]

,但我想打印这样的:

reason1 = result_dict [START_1]

reason2 = result_dict [START_2]

+1

中的“名”的想法字典对Python没有意义。 – Ffisegydd 2015-02-09 10:01:57

+1

从你的代码中,除非你传入字符串'“result_dict”'',否则函数无法神奇地知道你认为你的字典被称为'result_dict'。 – khelwood 2015-02-09 10:03:28

+0

当我调用函数我写result_dict作为第一个参数。但它会打印出result_dict的内容而不是'result_dict' – 2015-02-09 10:04:17

回答

0

您可以在全局对象:

def define_var(dictionary, entry, counter): 
    d_name = next(k for k, v in globals().items() if v is dictionary) 
    for i in range(counter): 
     print("reason%d = %s['%s_%d']" % (i + 1, d_name, entry, counter)) 

print(define_var(result_dict, 'start', 3)) 


reason1 = result_dict['start_3'] 
reason2 = result_dict['start_3'] 
reason3 = result_dict['start_3'] 

如果你在print(id(result_dict))print(id(dictionary))中的功能当你通过result_dict 你会看到他们两个都是相同的对象,所以我们只用isglobal字典中获得名称。

如果你想结果分配给一个理由的变量可以退货吗,是这样的:

def define_var(dictionary, entry, counter): 
    d_name = next(k for k, v in globals().items() if v is dictionary) 
    return "%s['%s_%d']" % (d_name, entry, counter) 

reason = define_var(result_dict,2,3) 
print(reason) 

或者使用的字典:

def define_var(dictionary, entry, counter): 
    d_name = next(k for k, v in globals().items() if v is dictionary) 
    reasons = {} 
    for i in range(counter): 
     reasons["reason{}".format(i)] = "{}[{}]".format(d_name, entry) 
    return reasons 
+0

谢谢你!我还是新来的python。不知道它是如何工作的,但它工作,我会发现!有什么办法可以给你一个荣誉或类似的东西吗? – 2015-02-09 10:27:08

+0

@AlexHeld,它只是使用'is'来检查标识,该标识检查两个对象是否实际上是相同的对象,以查找从'globals()'字典传来的'字典'的名称。 – 2015-02-09 10:29:01

+0

谢谢两位;) – 2015-02-09 10:31:29