如何传递词典的名称

2024-09-29 21:31:15 发布

您现在位置:Python中文网/ 问答频道 /正文

在下面的代码块中,我只想传输字典的名称(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]

等等


Tags: 代码名称内容fordictionary字典vardef
1条回答
网友
1楼 · 发布于 2024-09-29 21:31:15

您可以在globals中找到对象:

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']  

如果传入result_dict时在函数中print(id(result_dict))print(id(dictionary)) 您将看到它们都是具有相同id的相同对象,因此我们只需使用isglobaldict获取名称

如果要将结果分配给原因变量,可以返回它,如下所示:

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

相关问题 更多 >

    热门问题