Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何提取字典条目的变量名?_Python_Dictionary_Variables_Lookup - Fatal编程技术网

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