【问题标题】:Problem in accessing Dictionary with key as True and Integer key as 1使用键为 True 和整数键为 1 访问字典时出现问题
【发布时间】:2021-12-09 04:38:27
【问题描述】:

我的密码


   mydict={True:'Visa',2:"verified",1:'Married',(111,222):'dept1 office 2'}
   print(f"mydict.get(True)---> {mydict.get(True)}")
   print(f"mydict.get(2)---> {mydict.get(2)}")
   print(f"mydict.get(1)---> {mydict.get(1)}")
   print(f"mydict.get((111,222))---> {mydict.get((111,222))}")

输出

mydict.get(True)---> Married
mydict.get(2)---> verified
mydict.get(1)---> Married
mydict.get((111,222))---> dept1 office 2

我的问题是为什么 mydict.get(True)---> 已婚...应该是 Visa 对...为什么会这样?

【问题讨论】:

  • 我会避免使用True 作为键
  • True1 是同一个键,这就是为什么 True == 1 计算结果为 True
  • 你是对的兄弟......但问题是字典不能有重复的键......作为 1 的键和 True 都作为已婚......如何访问值“签证” .即使 dict 以 1 作为键。
  • @AMIRHAMZASHAIKH 正确,打印 mydict 并查看返回的内容。
  • @AMIRHAMZASHAIKH 你确定吗?请参阅我的答案中的示例。可以肯定的是,print(mydict) 不会同时显示 1True

标签: python dictionary integer boolean key-value


【解决方案1】:

如果你查字典,你可以知道:

(因为True1 同一个被删除,因为dict 中不能有两个键)

>>> mydict={True:'Visa',2:"verified",1:'Married',(111,222):'dept1 office 2'}
    
>>> mydict    
{True: 'Married', 2: 'verified', (111, 222): 'dept1 office 2'}

您可以使用不同的密钥,例如False:

mydict={False:'Visa',2:"verified",1:'Married',(111,222):'dept1 office 2'}
print(f"mydict.get(False)---> {mydict.get(False)}")
print(f"mydict.get(2)---> {mydict.get(2)}")
print(f"mydict.get(1)---> {mydict.get(1)}")
print(f"mydict.get((111,222))---> {mydict.get((111,222))}")

输出:

mydict.get(False)---> Visa
mydict.get(2)---> verified
mydict.get(1)---> Married
mydict.get((111,222))---> dept1 office 2

dict 中不能有多个键,如果你这样定义,第一个键保持并继续下一步,下一个,...并选择最后一个值:

>>> dct = {True : 1, 1 : 2 , 1.0 : 3, 0 : 4, False : 5, 2.0 : 6, 2 : 7}
>>> dct
{True: 3, 0: 5, 2.0: 7}

【讨论】:

    【解决方案2】:

    数据类型不是字典中数字键散列的区别因素。

    以下词典:

    {True:'A', 1:'B', 1.0:'C'}
    

    实际上最终是:

    {True: 'C'}
    

    因为当您多次提供相同的键时,最后一个值会更新初始键。因此,无论是布尔值、整数还是浮点数,值 1 都被认为是相同的。这与比较运算符一致:True == 1 == 1.0

    如果您想进行区分,您需要将所有内容转换为字符串或将数据类型添加为键的一部分(看起来都不是很好,所以也许您需要使用不同的约定True 键)。

    【讨论】:

      【解决方案3】:

      Python 中最出色的显示效果之一,基于您不能拥有多个相等键的事实(如 ==-equal)

      >>> {1: "one", True: "true", 1.0: "ok", 0.99999999999999999: "weird"}
      {1: 'weird'}  # ?
      

      如果多次遇到相同的键(通过== 进行相等性测试),则第一个键“获胜”,但最后一个值:

      >>> d = {1: 2}
      >>> d[True] = 5
      >>> d
      {1: 5}
      
      >>> d = {True: 2}
      >>> d[1] = 5
      >>> d
      {True: 5}
      

      【讨论】:

      • 这是我见过的最好的例子之一。 +1
      • 不错的一个 ;)....
      • 感谢兄弟解决这个疑问@user2390182
      猜你喜欢
      • 2017-01-21
      • 1970-01-01
      • 1970-01-01
      • 2012-12-20
      • 2012-03-23
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 2017-10-23
      相关资源
      最近更新 更多