Python:如何提取字典项的变量名?
我想知道怎么找到字典元素的变量名:
比如说:
>>>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 个回答
简单的回答是:不要用
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'
补充一下zenazn说的内容:
但是我怎么才能把那个id变回变量名呢?
简单来说,其实你并不想这样做。如果你觉得需要这样做,那说明你的程序设计有问题。如果你能更具体地告诉我们你想解决什么问题,我们可以帮你找到更好的解决办法。
变量名其实就是一个名字——对程序来说,它没有什么特别的意义,只是为了方便程序员使用(在Python中这不完全正确,但先听我说完)。对于Python解释器来说,名字dict1
只是程序员告诉Python去查看内存地址0x1234
的一种方式。
而且,把一个内存地址(比如0x1234
)再变回一个变量名(比如dict1
)这个想法本身就不太合理,尤其是因为多个变量名可以指向同一个对象:
dict1 = {...}
dictCopy = dict1
现在dictCopy
和dict1
都是字典的名字——它们都指向同一个东西。如果你在找的那个函数真的存在,Python应该选择哪个名字呢?