遍历多个字典并获取值在其中的字典名称

2024-09-30 01:25:55 发布

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

我想在多个字典中循环查找驻留在其中的值。如果找到值,我需要返回值和dict的名称。我已经编写了一个函数来执行此操作,但我无法仅提取完整dict的名称。代码如下:

a = {1: ((1,1),999), 2: ((2,2),998), 3:((3,3),998)}
b = {1: ((4,4),997), 5:((5,5),996)}

def retOBJECT(tup):
    for l in [a,b]:
        for v in l:
            if tup in l[v]:
                return l,v,l[v][1]

print retOBJECT((1,1))

>>> 
({1: ((1, 1), 999), 2: ((2, 2), 998), 3: ((3, 3), 998)}, 1, 999)

我不想返回整个字典,只想返回它的名称,这样我就知道其他值的来源,即最后两个数字。在

我希望它看起来像:

^{pr2}$

有人能帮忙吗。我一直在这里找到很好的建议,我期待着一些天才指出如何检索字典的名字。在


Tags: 函数代码in名称forreturnif字典
3条回答

ab只是对dictionary对象的引用,所以每当您使用a和{}时,python实际上使用它们所指向的对象。在

虽然您可以使用globals()来实现您想要做的事情,但我不知道您为什么要这样做:

globals() -> dictionary

Return the dictionary containing the current scope's global variables.

In [110]: globals()['a']
Out[110]: {1: ((1, 1), 999), 2: ((2, 2), 998), 3: ((3, 3), 998)}

In [111]: def retOBJECT(tup):
        for l in ['a','b']:
                for v in globals()[l]:
                        if tup in globals()[l][v]:
                                return l,v,globals()[l][v][1]
   .....:             

In [112]: print retOBJECT((1,1))
('a', 1, 999)

In [113]: print retOBJECT((2,2))
('a', 2, 998)

In [114]: print retOBJECT((5,5))
('b', 5, 996)
def retOBJECT(tup):
    for l_name, l in [('a',a),('b',b)]:
        for v in l:
            if tup in l[v]:
                return l_name, v,l[v][1]

如果您真的想要dict的名称,我建议给字典一个'name'键,它保存dict的“name”

a['name'] = 'a'

您还可以使a成为一个具有对象的“name”和dict的元组

^{pr2}$

相关问题 更多 >

    热门问题