Python:如何提取字典条目的变量名?
我想知道如何查找字典元素的变量名: 例如:Python:如何提取字典条目的变量名?,python,dictionary,variables,lookup,Python,Dictionary,Variables,Lookup,我想知道如何查找字典元素的变量名: 例如: >>>dict1={} >>>dict2={} >>>dict1['0001']='0002' >>>dict2['nth_dict_item']=dict1 >>>print dict2 {'nth_dict_item': {'0001': '0002'}} >>>print dict2
>>>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还是相当陌生:)
感谢您的帮助,谢谢
相关的
更新:这就是为什么我希望它能起作用: 我正在尝试制作一个使用字典的应用程序,有点像数据库。我希望此psuedocode的功能能够正常工作:
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#将是一个唯一的值,我使用它作为数据库键/unqiueID来查找条目
我希望能够通过以下方式更新FooBar1.avi的“评论”字段:
WhichDict= dict_database[SomeUniqueIdentifier1]
WhichDict[WhichDict.keys()[0]][2]='newcomment'
而不是必须这样做:
dict_database['SomeUniqueIdentifier1'][dict_database['SomeUniqueIdentifier1'].keys()[0]][2]='newcomment'
谢谢大家。我现在明白了,我误解了很多基本知识(全脑放屁)。将返回并修复设计。谢谢大家 变量名只是一个名称——就程序而言,它没有真正的意义,只是为了方便程序员(这在Python中并不完全正确,但请注意)。就Python解释器而言,名称
dict1
只是程序员告诉Python查看内存地址0x1234
的方式
此外,将内存地址(0x1234
)转换回变量名(dict1
)的想法毫无意义,特别是考虑到多个变量名可以引用同一对象:
dict1 = {...}
dictCopy = dict1
现在,
dictCopy
和dict1
一样是字典的名称——它们都引用相同的东西。如果您要查找的函数存在,Python应该选择哪个名称?添加zenazn所说的内容:
但是我怎样才能将该id转换回变量名呢
简而言之,你并不真的想要。如果您认为有必要,那么您的程序设计有很大问题。如果你更具体地告诉我们你想解决什么问题,我们可以帮助你找到一个更好的方法来完成它
我怎样才能让它告诉我
第2条[第n条]是或是
引用“dict1”
你需要重新考虑你的设计 一个快速的破解方法是将变量名放入
dict2['item_n'] = 'dict1'
或者使用元组
dict2['item_n'] = ('dict1', dict1)
有一个名为“代码>局部())/<代码>的函数,它给出了一个局部变量名字典,也许您可以在重新考虑设计时考虑它。
在这里,看看locals()
是如何工作的:
>>> x = 10
>>> y = 20
>>> c = "kmf"
>>> olk = 12
>>> km = (1,6,"r",x)
>>> from pprint import pprint
>>> pprint( locals() )
{'__builtins__': <module '__builtin__' (built-in)>,
'__doc__': None,
'__name__': '__main__',
'c': 'kmf',
'km': (1, 6, 'r', 10),
'olk': 12,
'pprint': <function pprint at 0x016A0EB0>,
'x': 10,
'y': 20}
>x=10
>>>y=20
>>>c=“kmf”
>>>olk=12
>>>km=(1,6,“r”,x)
>>>从pprint导入pprint
>>>pprint(locals())
{“内置”:,
“文件”:无,
“uuu name:”uuu main_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,
‘c’:‘kmf’,
“km”:(1,6,'r',10),
奥尔克:12岁,
“pprint”:,
“x”:10,
“y”:20}
更新 我希望能够通过以下方式更新FooBar1.avi的“评论”字段:
WhichDict= dict_database[SomeUniqueIdentifier1]
WhichDict[WhichDict.keys()[0]][2]='newcomment'
WhichDict=dict\u数据库[SomeUniqueIdentifier1]
WhichDict[WhichDict.keys()[0][2]='newcomment'
嗯,这是微不足道的
dict_database[identifier][2]=新的注释
WhichDict[WhichDict.keys()[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'
现在,对于每部电影,您都在做:
dict_n = {}
dict_n["000n"] = [movie_duration,movie_type,comments]
每个目录只有一个条目。然后您将多个电影目录存储在一个中心目录中:
dict_database = {}
dict_database["0001"] = dict_1
dict_database["0002"] = dict_2
dict_database["0003"] = dict_3
dict_database["000n"] = dict_n
编辑:这可能就是您的想法
对于每部电影,都有一个从属性名到值的dict
movie_n = {}
movie_n["movie_duration"] = 333
movie_n["movie_type"] = "Fantasy"
movie_n["comments"] = ""
然后,movies[“any_file.avi”]
为您提供该指令。要将电影添加到目录中,然后添加注释,请输入:
movies["any_file.avi"] = movie_n
movies["any_file.avi"]["comments"] = "new comment"
如果你必须在电影的编号和文件名之间进行选择,我会选择文件名,因为当你实际尝试访问一部电影时,它更相关。另外,如果有必要,您可以通过movies.keys()
或类似的方法来列举您的电影(尽管顺序有误)。如果要同时使用数字和文件名,请将文件名添加为每部电影的另一个键
movie_n["filename"] = "any_file.avi"
或
使用
重复-什么是dict_1、dict_2和dict_3?第二个“FooBar2.avi”应该是“FooBar3.avi”吗?等等,那么你要为每部电影创建一个新的字典,只包含一个条目,其中键是电影的名称,值是电影属性的数组?我的理解正确吗?dict_1正是显示的内容。包含关键字的单个条目:pair FooBar1:[电影持续时间、电影类型、注释]。是的,应该是foobar3。然后将创建另一个全局字典,该字典将每个电影目录与唯一标识符配对作为键(用于查找)。就像电影索引一样,问题在于实际使用中,我不知道如何将其与dict1进行比较(如果我知道,我就不需要将此信息报告回来)在处理嵌套数据结构时不显示我需要的内容。这样看来,我失去了按文件名引用电影及其属性的能力。因为dict_数据库条目不再包含电影文件名。然后我需要一本字典,将dict_数据库索引键与文件名联系起来……这就是我已经在做的事情?谢谢你的帮助。我脑子里放了个屁,忘了一些基本的东西。谢谢你的时间。我需要有能力让用户为每部电影创建附加属性(评级、观看的数据)等。添加这些附加内容不会吗
movie_n["filename"] = "any_file.avi"
movies["000n"]["filename"] = "any_file.avi"
from guppy import hpy
h=hpy()
h.iso(dict2['nth_dict_item']).sp
0: h.Root.i0_modules['__main__'].__dict__['dict1']