具有相同键的Python字典wierd行为

具有相同键的Python字典wierd行为,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,实际上,我的主程序中有一个bug。在一些检查中,我发现字典有一些古怪的行为 这是一个非常基本的例子:- x,y,z=1,1,1 dik={x:'A',y:'B',z:'C'} 打印(dik[x]) 预期输出:A 错误输出:C 在我的程序中,x,y,z的值是随机的一位正整数 因此,在许多情况下,x、y或z的值可能是相同的 在这种情况下,字典的行为会变得更加古怪 似乎当多个键具有相同的值时,python字典更喜欢具有该值的最后一项 但我不想要这个。 我不想使用x的“值”作为键 我想使用“name”

实际上,我的主程序中有一个bug。在一些检查中,我发现字典有一些古怪的行为

这是一个非常基本的例子:-

x,y,z=1,1,1
dik={x:'A',y:'B',z:'C'}
打印(dik[x])
预期输出:
A

错误输出:
C

在我的程序中,
x,y,z
的值是随机的一位正整数

因此,在许多情况下,x、y或z的值可能是相同的

在这种情况下,字典的行为会变得更加古怪

似乎当多个键具有相同的值时,python字典更喜欢具有该值的最后一项

但我不想要这个。

我不想使用
x
的“值”作为键

我想使用“name”
x
作为键

简单地说:-

假设我申报

>>x=3

现在我想要像这样的东西

打印(getName(x))

x

我怎样才能做到?
我知道这个问题已经被问过了,但答案是那个问题。在我的情况下不起作用

您正在设置字典重复键。 执行此操作时:

dik = {x:'A',y:'B',z:'C'}
x、 y和z具有相同的值(1),因此这就像您正在设置:

dik = {1:'A',1:'B',1:'C'}
这很糟糕,因为字典不能重复键,所以字典将包含以下项:

{1: 'C'}

由于这个原因,您得到的是“C”值,感觉就像您试图用变量表示两件事。有一些数值分配给变量,然后有一个字符串保存在字典中。我认为将变量x、y、z扩展为对象会使您受益匪浅:

class my_obj():
    def __init__(self, digit, letter):
        self.digit = digit
        self.letter = letter

x = my_obj(1, 'A')
y = my_obj(1, 'B')
z = my_obj(1, 'C')
dik = { 'x': x, 'y': y, 'z': z }

这不是奇怪的行为,这是人们所期望的。你能详细说明一下你想做什么/为什么要做,因为这看起来很像XY问题“我想用“object”
x
作为键”——听起来你对Python中变量和对象之间的关系有误解。你可能想读@user2357112好的,我说的“object”是指“name”x@lllrnr101实际上,为了避免这种行为,我在我的主程序中也使用了tuple,它可以工作,但会造成不必要的复杂性,我要求发布和解释您试图实现的内容。i、 你有一个问题,你已经想出了一个“解决方案”,这个“解决方案”并没有像你期望的那样有效,很可能是“坏的”。在这里,你会问如何修复“坏”的解决方案,但实际上你需要问如何处理潜在的问题。我看到你没有阅读整个问题。我知道为什么会这样。要解决这个问题:我不希望python使用x的值(即1)作为字典键。我只想用x作为键,而不是它的值。或者可能是这种情况的解决方法对不起,我想我现在明白了,也许你应该尝试
print(dik['x'])
,但这将返回
keyrerror
,因为使用
dik['x']
在字典中搜索是否有字符串“x”,但它不是。如果您尝试dik={'x':'A',y:'B',z:'C'}这将按照您的需要工作。