【问题标题】:Coercing Dict to Read List as Tuples强制 dict 将列表作为元组读取
【发布时间】:2017-05-17 17:11:24
【问题描述】:

我有一个现有的dict,它有键但没有值。我想通过同时迭代两个列表来填充值,如下所示:

for (pair,name) in enumerate(zip([[0,1],[0,2],[0,3],[1,2],[1,3],[2,3]], ['pair1','pair2','pair3','pair4','pair5','pair6'])):
    my_dict[tuple(name)] = pair

但是我得到了错误:unhashable type: list.

所以看来我尝试将列表转换为元组是行不通的。我选择元组是因为,根据我从其他帖子中读到的内容,这是一种更好的方式。

有人可以根据需要调整此方法吗?我也愿意接受其他解决方案。

更新

我将承担责任,因为我没有将我的全部职能都放在帖子中。我认为更简洁会使事情更容易理解,但最终忽略了一些重要的细节。对此感到抱歉。我正在使用 numpysklearn 这是我的全部功能:

pair_names = ['pair1','pair2','pair3','pair4','pair5','pair6']
pair_dict = {p:[] for p in pair_names}
for (pair,key) in zip([[0,1],[0,2],[0,3],[1,2],[1,3],[2,3]], ['pair1','pair2','pair3','pair4','pair5','pair6']):
    x = iris.data[:,pair]
    y = iris.target
    clf = DecisionTreeClassifier().fit(x,y)
    decision_boundaries = decision_areas(clf,[0,7,0,3])
    pair_dict[key] = decision_boundaries

到目前为止,根据这个问题的答案中的建议,我删除了enumerate 并简单地使用了zip。不幸的是,现在在线clf = DecisionTreeClassifier().fit(x,y) 我得到一个错误:样本数与标签数不匹配。我觉得很奇怪,因为我根本没有改变样本量。我唯一的猜测是它与 enumeratezip 有关——因为这是与文档示例中原始函数的唯一区别

【问题讨论】:

  • 您检查过enumerate(zip(...)) 实际返回的内容吗?这不是你想的那样。
  • A list 是可变的,因此不能用作字典键。如果你尝试my_dict={[1]:1},你会得到TypeError: unhashable type: 'list'
  • @tobias_k 谢谢我把它们弄混了。我自己几分钟前才注意到。帖子已更新。

标签: python python-3.x dictionary


【解决方案1】:

也许你想要的是:

{ tuple(x):y for (x,y) in zip([[0,1],[0,2],[0,3],[1,2],[1,3],[2,3]], ['pair1','pair2','pair3','pair4','pair5','pair6'])}

【讨论】:

  • 感谢您的解决方法,但如果您愿意参考我更新的帖子,我还有一些问题。
  • 对不起,我不知道numpysklearn,我无法进一步帮助您。
  • 平心而论,您确实回答了我最初的问题。我找到了一种方法来通过迭代一个超出范围的单独列表来解决我的问题,这足以简化事情让我弄清楚。
猜你喜欢
  • 1970-01-01
  • 2018-05-28
  • 1970-01-01
  • 2021-07-01
  • 2019-10-16
  • 2017-07-04
  • 2022-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多