尝试从一系列字典中检索键时出现“类型错误:列表索引必须是整数或切片,而不是 str”

Posted

技术标签:

【中文标题】尝试从一系列字典中检索键时出现“类型错误:列表索引必须是整数或切片,而不是 str”【英文标题】:Getting ' TypeError: list indices must be integers or slices, not str' when trying to retrieve keys from series of dictionaries 【发布时间】:2021-08-21 04:17:55 【问题描述】:

我正在尝试从包含字典的系列中获取键。 我的代码是:

a = ['uid': 46, 'uid': 47]
print (a['uid'])

但这会抛出 ' TypeError: 列表索引必须是整数或切片,而不是 str'

我想要实现的是让这段代码工作:

ids = [a["id"] for a in df["driven"]]

理想情况下,这会给我 [46, 47]。

但我收到相同的 TypeError 消息。

df["driven"] 看起来类似于: ['id': 46, 'id': 47] 并且是 pandas.series 类型

【问题讨论】:

【参考方案1】:

您的字典在一个列表中,您可以使用像a[0],a[1] 这样的索引从中获取元素。您实际上是先从列表中获取,然后是字典。

a = ['uid': 46, 'uid': 47]
print ([val['uid'] for val in a])

输出:

[46,47]

【讨论】:

【参考方案2】:

目前您正在尝试执行以下操作。

lst = ['a','b','c']
print(lst['a'])

当索引一个字符串时,你必须并且应该只给出整数。虽然我知道你想做什么。下面的代码将遍历列表,然后在给定的字典中找到每个键的值。

a = ['uid': 46, 'uid': 47]
print([dicts['uid'] for dicts in a])

输出

[46, 47]

【讨论】:

谢谢,是的,我确实意识到了这一点。它基本上是嵌套的,所以我需要做一层额外的取消嵌套。【参考方案3】:

a是一个列表,没有像uid这样的str索引,你需要访问列表dict元素来获取uid 代码:

a = ['uid': 46, 'uid': 47]
print([element["uid"] for element in a])

结果:

[46, 47]

【讨论】:

以上是关于尝试从一系列字典中检索键时出现“类型错误:列表索引必须是整数或切片,而不是 str”的主要内容,如果未能解决你的问题,请参考以下文章

分配时出现 Python 字典键错误 - 我该如何解决?

c#多键字典,用自己的可变类替换元组时出现“KeyNotFoundException”[重复]

为啥在 Vue js 中尝试从 firebase 检索令牌时出现错误?

无法解析 json

尝试在数组中找到所有相等的最小值时出现真值错误,然后检索索引

为啥在尝试使用 Angular 检索数据库信息时出现错误 415?