使用变量调用字典中的键?

Calling a Key in a dictionary using a variable?

我正在尝试能够 return 基于用户定义的变量的特定词典的预算数字。我自己没有运气解决这个问题,非常感谢任何帮助。

owners = ['rob','andre']
team_balance = {}

for name in owners:
    team_balance[name.capitalize()] ={'budget':200}

x='Rob' # x will be user defined using input()

print(team_balance[{x}]['budget'])

尝试以上操作会导致以下错误:

TypeError: unhashable type: 'set'

你只需要像这样省略花括号:

print(team_balance[x]['budget'])

如果你加上它们,结果是一个集合,你可以这样检查:

isinstance({x}, set)

集合不能用作字典键,因为它是不可散列的(这几乎意味着它可以更改)。

问题来自最后一行的“{}”。

当您定义字典时,您使用字符串作为键。 所以当你从字典中调用一个值时,你必须使用字符串。

x='Rob'也在x中赋值一个字符串,这样好不好。 我们可以使用函数 type 来检查对象的 class :

>>> type(x)
<class 'str'>

最后一行有什么问题是 {x} 将您的字符串转换为一组字符串。集合就像一个列表,但无序、不可更改且只有唯一值。

>>> type({x})
<class 'set'>

因此,由于您使用的对象类型与您用来设置值的对象类型不同,因此无法正常工作。

你得到的错误信息TypeError: unhashable type: 'set'是因为一个集合对象是不可用的,所以它不能用作字典键(它解释了为什么here)。但是,即使集合是一个可用对象,您也不会有您想要的值,因为它不等于您用来定义键的值。

只需删除 {} :

owners = ['rob','andre']
team_balance = {}

for name in owners:
    team_balance[name.capitalize()] ={'budget':200}

x='Rob' # x will be user defined using input()

print(team_balance[x]['budget'])


>>> 200
owners = ['rob','andre']
team_balance = {}

for name in owners:
    team_balance[name.capitalize()] ={'budget':200}

x=input() # user will enter this value

使用try except来处理异常

try:
  print(team_balance[x.capitalize()]['budget']) 
except:
  print("Entered value not in owners list ")