如何解决y_true_val = list(y_true.values()) AttributeError:'list'对象没有属性'values'?

问题描述 投票:-1回答:1

我试图为Zachary karate俱乐部数据集写代码。现在我卡在了以下一行

y_true_val = list(y_true.values())

我的代码:

nmi_results = []
ars_results = []

y_true_val = list(y_true.values())

# Append the results into lists
for y_pred in results:

    nmi_results.append(normalized_mutual_info_score(y_true_val, y_pred))
    ars_results.append(adjusted_rand_score(y_true_val, y_pred))

fig, (ax1, ax2, ax3) = plt.subplots(1, 3, sharey=True, figsize=(16, 5))

x = np.arange(len(y_pred))
avg = [sum(x) / 2 for x in zip(nmi_results, ars_results)]

xlabels = list(algorithms.keys())

sns.barplot(x, nmi_results, palette='Blues', ax=ax1)
sns.barplot(x, ars_results, palette='Reds', ax=ax2)
sns.barplot(x, avg, palette='Greens', ax=ax3)

ax1.set_ylabel('NMI Score')
ax2.set_ylabel('ARS Score')
ax3.set_ylabel('Average Score')

# # Add the xlabels to the chart
ax1.set_xticklabels(xlabels)
ax2.set_xticklabels(xlabels)
ax3.set_xticklabels(xlabels)

# Add the actual value on top of each bar
for i, v in enumerate(zip(nmi_results, ars_results, avg)):
    ax1.text(i - 0.1, v[0] + 0.01, str(round(v[0], 2)))
    ax2.text(i - 0.1, v[1] + 0.01, str(round(v[1], 2)))
    ax3.text(i - 0.1, v[2] + 0.01, str(round(v[2], 2)))

# Show the final plot
plt.show()

输出:

y_true_val = list(y_true.values())

AttributeError: 'list' object has no attribute 'values'
python list data-mining social-networking listobject
1个回答
2
投票

希望这能帮到你

首先让我们来了解一下这个错误。

  • 正如评论中提到的 attribute 当你试图访问一个在该对象的调用方法中没有定义的方法时,就会发生错误。

  • 例如,在py字符串对象中,我们有 .lower() 可用来生成一个小写的新字符串(From ABCabc). 如果你试图访问这个 .lower() 对于一个整数对象,你会收到Attribute错误。

如何解决这个错误?

  1. 使用python内置的 类型 操作符来确定你有什么样的数据类型对象。如果它是一个列表,那么你不需要做任何的 .values()

    print(type(y_true))
    
  2. 使用python内置的 运算符,以了解该对象有哪些可用的运算符。如果你看到 values 操作员,然后才应用 .values() 操作。

    print(dir(y_true))
    
  3. 还是不确定,还是遇到了其他的错误尝试 print(y_true) 看看你有什么。

© www.soinside.com 2019 - 2024. All rights reserved.