Python:如何提取字典项的变量名?

2 投票
7 回答
7068 浏览
提问于 2025-04-15 11:03

我想知道怎么找到字典元素的变量名:

比如说:

    >>>dict1={}
    >>>dict2={}

    >>>dict1['0001']='0002'
    >>>dict2['nth_dict_item']=dict1
    >>>print dict2
    {'nth_dict_item': {'0001': '0002'}}
    >>>print dict2['nth_dict_item']
    {'001': '002'}

我怎么能让它告诉我 dict2['nth_dict_item'] 是指向 "dict1" 的?我想要的是它所引用的数据结构的名字,而不是数据本身。

如果我比较 id(dict1) 和 id(dict2['nth_dict_item']) 的输出,我可以发现它们是一样的。

但我怎么能把这个 id 转回变量名呢?有没有更直接或更简单的方法来获取我想知道的信息?

我相信我只是忽略了一个能让我生活更简单的函数,但我对 Python 还很陌生 :)

任何帮助都很感激,谢谢!

相关内容


更新:这是我想让这个功能工作的原因:

我正在尝试制作一个应用程序,使用字典像数据库一样。我想要这个伪代码的功能:

dict_1={}
dict_2={}
dict_3={}

dict_1["FooBar1.avi"]=[movie_duration,movie_type,comments]
dict_2["FooBar2.avi"]=[movie_duration,movie_type,comments]
dict_3["FooBar3.avi"]=[movie_duration,movie_type,comments]

dict_database[SomeUniqueIdentifier1]=dict_1
dict_database[SomeUniqueIdentifier2]=dict_2
dict_database[SomeUniqueIdentifier3]=dict_3

SomeUniqueIdentifier# 将是我用作数据库键/唯一 ID 来查找条目的唯一值。

我想通过以下方式更新 FooBar1.avi 的 "comments" 字段:

WhichDict= dict_database[SomeUniqueIdentifier1]
WhichDict[WhichDict.keys()[0]][2]='newcomment'

而不是必须这样做:

dict_database['SomeUniqueIdentifier1'][dict_database['SomeUniqueIdentifier1'].keys()[0]][2]='newcomment'

谢谢大家。我现在明白我之前误解了很多基础知识(完全是脑袋一片空白)。我会回去修正设计。感谢你们!

7 个回答

4

简单的回答是:不要用

WhichDict[WhichDict.keys()[0]][2]='newcomment'

而是用:

WhichDict.values()[0][2]='newcomment'

不过,用字典来表示一部电影其实不太合适。那为什么不使用一个类呢?

class Movie(object):
    def __init__(self, filename, movie_duration, movie_type, comments):
        self.filename = filename
        self.movie_duration = movie_duration
        self.movie_type = movie_type
        self.comments = comments

database = dict()
database['unique_id_1'] = Movie("FooBar1.avi", duration, type, comments)
# ...

some_movie = database[some_id]
some_movie.comment = 'newcomment'
7

补充一下zenazn说的内容:

但是我怎么才能把那个id变回变量名呢?

简单来说,其实你并不想这样做。如果你觉得需要这样做,那说明你的程序设计有问题。如果你能更具体地告诉我们你想解决什么问题,我们可以帮你找到更好的解决办法。

9

变量名其实就是一个名字——对程序来说,它没有什么特别的意义,只是为了方便程序员使用(在Python中这不完全正确,但先听我说完)。对于Python解释器来说,名字dict1只是程序员告诉Python去查看内存地址0x1234的一种方式。

而且,把一个内存地址(比如0x1234)再变回一个变量名(比如dict1)这个想法本身就不太合理,尤其是因为多个变量名可以指向同一个对象:

dict1 = {...}
dictCopy = dict1

现在dictCopydict1都是字典的名字——它们都指向同一个东西。如果你在找的那个函数真的存在,Python应该选择哪个名字呢?

撰写回答