【问题标题】:How to accept a database and print out a list in python如何接受数据库并在python中打印出一个列表
【发布时间】:2016-11-13 18:28:43
【问题描述】:

所以我必须创建一个简单的程序,该程序接受一个包含许多艺术家及其艺术作品的数据库以及艺术细节。有一个给定的艺术家,我必须在数据库中搜索以找到他们对同一艺术家拥有的所有艺术家并返回它们。我不允许使用其他内置函数,也不允许导入任何东西。有人可以告诉我为什么它会产生错误及其含义吗?

def works_by_artists(db,artists): 
  newlist = {}
  for a in db.keys():
    for b in db[artists]:
      if a == b:
        newlist.append(a);
  return newlist

这会打印出一个错误:

for b in db[artists]:
TypeError: unhashable type: 'list'

【问题讨论】:

  • 这里有很多未定义的变量:b和x应该是一个列表...

标签: python database list function dictionary


【解决方案1】:

字典只能接受某些类型的值作为键。特别是,它们必须是 hashable,这意味着它们在字典中时不能更改(“不可变”),并且必须有一个 Python 已知的函数,它接受该值并返回一个非负整数,以某种方式表示整数。整数、浮点数、字符串和元组是不可变的和可散列的,而标准列表、字典和集合则不是。键的哈希值用于将键值对存储在标准 Python 字典中。选择此方法是为了查找键的速度,但速度是以限制可能的键值为代价的。可以选择其他方式,但这很适合字典在 Python 中的预期用途。

artists 的当前值不可散列时,您尝试执行for b in db[artists]: 行。这是一个错误。我不能说artists 的值是什么,因为该值是函数的参数,而您没有显示调用代码。

所以检查artists 的哪个值被赋予了导致显示错误的函数works_by_artists()。任何创建该值的都是代码中的实际错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 2013-09-29
    • 2023-02-25
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    相关资源
    最近更新 更多